随笔 - 384  文章 - 0  评论 - 0  阅读 - 13万

力扣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);

 

posted on   我不想一直当菜鸟  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示