力扣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 2022-05-07 10:52  我不想一直当菜鸟  阅读(72)  评论(0编辑  收藏  举报