https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/comments/
这道题目也是简单的,直接在String上面去操作就行了,我就偷懒了。
主要是学习一下优秀的解法,就是在原有的字符串上面操作,不使用额外空间的做法。
我的解法:
class Solution {
public String reverseLeftWords(String s, int n) {
//先把s转换成char数组
//k=2则把前两个抽出来,放到新数组
//位移后面的数到前面
//char[] ch = s.toCharArray();
String substrLeft = s.substring(0, n);
String substrRight = s.substring(n, s.length());
String res = substrRight + substrLeft;
return res;
}
}
// char[] temp = new char[n];
// int len = s.length();
// int j = 0;
// for(int i = n - 1; i < len; i++){
// ch[j++] = ch[i+1];
// }
// while(n)
优秀解法:
class Solution {
public String reverseLeftWords(String s, int n) {
int len=s.length();
StringBuilder sb=new StringBuilder(s);
reverseString(sb,0,n-1);
reverseString(sb,n,len-1);
return sb.reverse().toString();
}
public void reverseString(StringBuilder sb, int start, int end) {
while (start < end) {
char temp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));
sb.setCharAt(end, temp);
start++;
end--;
}
}
}
setCharAt(索引, 具体要代替的字符)
charAt(i) 这个则是返回第i索引的字符