344. 反转字符串
public void reverseString(char[] s) {
for (int i = 0; i < s.length / 2; i++) {
char temp = s[i];
int index = s.length -1 -i;
s[i] = s[index];
s[index] = temp;
}
}
较为简单,双指针解答
541. 反转字符串 II
public String reverseStr(String s, int k) {
char[] strs = s.toCharArray();
int left = 0;
int right = 0;
while (s.length() - right >= k) { // 看着不太对,长度减下标?画图之后,代入数字就合理了。
int index = right + k - 1;
if (s.length() - right < 2 * k) {
// 说明需要反转前面的内容,后面的不变
reverse(strs, left, index);
return new String(strs);
}
reverse(strs, left, index);
left = right = right + 2 * k;
}
reverse(strs, left, strs.length - 1); // 别忘了反转后续的字符
return new String(strs);
}
private void reverse(char[] str, int left, int right) {
// 反转从left到right的所有元素
while (left < right) {
char temp = str[left];
str[left] = str[right];
str[right] = temp;
left++;
right--;
}
}
要注意的细节内容太多了,调试了半天才写好。记得一定要画图
151. 反转字符串中的单词
public static String reverseWords(String s) {
String newStr = s.trim();
String[] s1 = newStr.split(" ");
StringBuilder stringBuilder = new StringBuilder(s1.length * 2 - 1);
Stack<String> stack = new Stack<>();
for (int i = 0; i < s1.length; i++) {
if (s1[i].isEmpty()) {
continue;
}
stack.add(s1[i]);
}
while (true) {
stringBuilder.append(stack.pop()); // 字符串大于等于1
if (stack.isEmpty()) {
break;
}
stringBuilder.append(" ");
}
return new String(stringBuilder);
}
使用了java自带的前后空格去除,和按元素分割函数。也可以自己写,函数不算复杂。