参考:https://gitee.com/programmercarl/leetcode-master
目录- 344. 反转字符串
- 541. 反转字符串 II
- 剑指 Offer 05. 替换空格
- 151. 翻转字符串里的单词
- 剑指 Offer 58 - II. 左旋转字符串
- KMP算法待看
class Solution {
public void reverseString(char[] s) {
int len=s.length;
for(int i=0;i
541. 反转字符串 II
class Solution {
public String reverseStr(String s, int k) {
int len=s.length();
char[] arr = s.toCharArray();
for(int i=0;i
剑指 Offer 05. 替换空格
双指针法:先把数组扩展到替换后的长度
两个指针,一个从原来末尾开始遍历,一个从新末尾开始遍历
遇到字符填入新末尾,遇到空格填入%20
class Solution {
public String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for(int i=0; i
151. 翻转字符串里的单词
先把多余的空格去掉,再翻转整个字符串,再每个单词内翻转
class Solution {
public String reverseWords(String s) {
StringBuilder sb = trimSpaces(s);
// 翻转字符串
reverse(sb, 0, sb.length() - 1);
// 翻转每个单词
reverseEachWord(sb);
return sb.toString();
}
public StringBuilder trimSpaces(String s) {
int left = 0, right = s.length() - 1;
// 去掉字符串开头的空白字符
while (left <= right && s.charAt(left) == ' ') {
++left;
}
// 去掉字符串末尾的空白字符
while (left <= right && s.charAt(right) == ' ') {
--right;
}
// 将字符串间多余的空白字符去除
StringBuilder sb = new StringBuilder();
while (left <= right) {
char c = s.charAt(left);
if (c != ' ') {
sb.append(c);
} else if (sb.charAt(sb.length() - 1) != ' ') {
sb.append(c);
}
++left;
}
return sb;
}
public void reverse(StringBuilder sb, int left, int right) {
while (left < right) {
char tmp = sb.charAt(left);
sb.setCharAt(left++, sb.charAt(right));
sb.setCharAt(right--, tmp);
}
}
public void reverseEachWord(StringBuilder sb) {
int n = sb.length();
int start = 0, end = 0;
while (start < n) {
// 循环至单词的末尾
while (end < n && sb.charAt(end) != ' ') {
++end;
}
// 翻转单词
reverse(sb, start, end - 1);
// 更新start,去找下一个单词
start = end + 1;
++end;
}
}
}
剑指 Offer 58 - II. 左旋转字符串
一共n个字符,左旋转前k个
先分别翻转前k个,后n-k个,再整体翻转
class Solution {
public String reverseLeftWords(String s, int n) {
char[] arr = s.toCharArray();
int len=s.length();
reverse(arr,0,n-1);
reverse(arr,n,len-1);
reverse(arr,0,len-1);
return new String(arr);
}
public void reverse(char[] arr, int left, int right){
while(left
KMP算法待看 


