力扣541(java)-反转字符串Ⅱ(简单)
题目:
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"
提示:
1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
1.将字符串变为字符数组,方便字符的遍历;
2.定义两个指针,分别表示反转的起始位置和结束位置;
说明:Math.min(i + k, n) - 1,取最小值是当总字符数 < k时,翻转数就为n,减一是因为i是从0开始的,真实值要小1。
代码:
或者:
1 class Solution { 2 public String reverseStr(String s, int k) { 3 char[] ch = s.toCharArray(); 4 for (int i = 0; i < ch.length; i += 2 * k){ 5 int left = i; 6 //最后不足k个 7 int right = Math.min(ch.length-1, i + k - 1); 8 while (left < right){ 9 char temp = ch[left]; 10 ch[left] = ch[right]; 11 ch[right] = temp; 12 left++; 13 right--; 14 } 15 } 16 return new String(ch); 17 } 18 }
小知识:
1.s.length是针对java中数组的,length是数组的一个属性,用来表示数组的长度,数组有length属性,而没有length()方法;
s.length()则是字符串的一个方法,用来返回字符串的长度的,字符串是没有length属性的,只有length()方法。
2.toCharArray() 方法将字符串转换为字符数组。
// 将字符串s转化成一个char类型的数组,数组名为s1 char[] s1 = s.toCharArray();
//又将s1转化成string字符串
return new String(s1);
分类:
力扣笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧