解法一:
申请额外空间
class Solution {
public String reverseLeftWords(String s, int n) {
//申请额外空间
StringBuilder sb = new StringBuilder();
//添加n索引之后字符串
for(int i = n; i < s.length(); i++) {
sb.append(s.charAt(i));
}
//添加n索引之前字符串
for(int i = 0; i < n; i++) {
sb.append(s.charAt(i));
}
return sb.toString();
}
}
解法二:
不能申请额外空间,只能在本串上操作
①反转区间为前n的子串
②反转区间为n到末尾的子串
③反转整个字符串
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder sb = new StringBuilder(s);
//反转区间为前n的子串
reverseString(sb, 0, n-1);
//反转区间为n到末尾的子串
reverseString(sb, n, sb.length()-1);
//反转整个字符串
reverseString(sb, 0, sb.length()-1);
return sb.toString();
}
//反转字符串
private void reverseString(StringBuilder s1, int start, int end) {
while(start < end) {
char c = s1.charAt(start);
s1.setCharAt(start, s1.charAt(end));
s1.setCharAt(end, c);
start++;
end--;
}
}
}