双指针 或者 for+单指针 都可
class Solution {public void reverseString(char[] s) {int right=s.length-1;for(int i=0;ichar temp=s[i];s[i]=s[right];s[right]=temp;right--;}}
}
//解法二(似乎更容易理解点)
//题目的意思其实概括为 每隔2k个反转前k个,尾数不够k个时候全部反转
class Solution {public String reverseStr(String s, int k) {char[] ch = s.toCharArray();for(int i = 0; i < ch.length; i += 2 * k){//以下与上题道理相同//这里是判断尾数够不够k个来取决end指针的位置int right=Math.min(ch.length-1,i+k-1);for(int j=i;jchar temp=ch[j];ch[j]=ch[right];ch[right]=temp;right--;}}return new String(ch);}
}
重点:
转为StringBuilder 追加
class Solution {public String replaceSpace(String s) {StringBuilder sb=new StringBuilder();for(int i=0;iif(s.charAt(i)==' ') sb.append("%20");else sb.append(s.charAt(i));}return sb.toString();}
}
还是 整体旋转+局部旋转!
步骤:
注意:处理好调用时的参数-----------> 需要-1,因为含头含尾
class Solution {public String reverseLeftWords(String s, int n) {s=reversString(s,0,n-1);s=reversString(s, n, s.length()-1);s=reversString(s,0,s.length()-1);return s;}public String reversString(String s, int start, int end){char[] ch=s.toCharArray();for(int i=start;ichar temp=ch[i];ch[i]=ch[end];ch[end]=temp;end--;}return new String(ch);}
}