1 344. 反转字符串
1.1 题目

1.2 题解
class Solution {
public void reverseString(char[] s) {
int len = s.length;
for (int i = 0; i < len / 2; i++) {
char c = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = c;
}
}
}
2 557. 反转字符串中的单词 III
2.1 题目

2.2 题解
class Solution {
public String reverseWords(String s) {
String[] words = s.split(" ");
String res = "";
for (int i = 0; i < words.length; i++) {
char[] chars = words[i].toCharArray();
for (int j = 0; j < chars.length / 2; j++) {
char temp = chars[j];
chars[j] = chars[chars.length - j - 1];
chars[chars.length - j - 1] = temp;
}
if (i == words.length - 1)
res += String.valueOf(chars);
else
res += String.valueOf(chars) + " ";
}
return res;
}
}
3 总结
3.1 Java中字符串反转的一些思考
Java中字符串是不可变的,所以遇到344的题目感觉还行,是以字符数组展示的;而557则是以字符串表示的,需要将其分片后,再度转化为字符数组进行反转,空间消耗很大。
3.2 双指针的变形
上述提到s[i] = s[len - i - 1],当双指针存在一定关系时,可以只用一个指针表示。
这篇博客探讨了Java中字符串反转的两种方法,分别针对字符数组和字符串本身。在344题中,直接对字符数组使用双指针进行反转;而在2557题中,需要先将字符串分词再反转每个单词。由于Java字符串的不可变性,后者消耗更多空间。文章总结了双指针技巧,并指出在特定条件下可以简化为单指针操作。

59

被折叠的 条评论
为什么被折叠?



