JAVA版本
思路:在做完上一题旋转之后,我们再做字符串的旋转之类的题时就不会再感觉那么困难了。
所以字符串的旋转都是部分旋转与整体旋转之间的联系关系。
解法一: StringBuilder + 双指针
class Solution {
public String reverseLeftWords(String s, int n) {
int length = s.length();
StringBuilder sb = new StringBuilder(s); //注意这里传入的是s,把String直接变为了StringBuilder
reverse(sb,0,n-1);
reverse(sb,n,sb.length()-1);
return sb.reverse().toString();
}
public static void reverse(StringBuilder sb , int left ,int right) {
while(left < right){
char temp = sb.charAt(left);
sb.setCharAt(left, sb.charAt(right)); //方法的参数(1.设置位置 ,2.设置字符);
sb.setCharAt(right, temp);
left++;
right--;
}
}
}
思路比较简单,不再赘述。
解法二 在原来数组的基础上操作 + 双指针
class Solution {
public String reverseLeftWords(String s, int n) {
char [] arrays = s.toCharArray();
reverse(arrays,0,n-1);
reverse(arrays,n,arrays.length-1);
reverse(arrays,0,arrays.length-1);
return new String(arrays);
}
public static void reverse(char [] arrays , int left ,int right) {
while(left < right){
char temp = arrays[left];
arrays[left] = arrays[right];
arrays[right] = temp;
left++;
right--;
}
}
}
不再赘述。