1、题目1:151-翻转字符串里的单词
类型:中等
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
双指针法:
- 1、倒序遍历字符串,记录单词左右索引边界 i,j
- 2、每确定一个单词的边界,则将其添加到单词列表 res
- 3、最终,将单词列表拼接为字符串,并返回即可
public String reverseWords(String s) {
s = s.trim();
int j = s.length() -1,i=j;
StringBuffer buffer = new StringBuffer();
while (i>=0 ){
while (i>=0 && s.charAt(i)!= ' ') i--;
buffer.append(s.substring(i+1,j+1)+" ");
while (i>=0 && s.charAt(i) == ' ') i--;
j = i;
}
return buffer.toString().trim();
}
总结
什么是字符串?
字符串可以理解为是一个字符串数组,在打基础的时候,不要太迷恋库函数,例如substr、split、reverse之类的。
在反转字符串中,双指针法在数组、链表、字符串中很常用。
字符串类类型的题目,往往想法比较简单,但是实现起来并不容易,复杂的字符串题目非常考验对代码的掌控能力。
双指针法是字符串处理的常客。