算法Day8|151-翻转字符串里的单词

53 阅读1分钟

1、题目1:151-翻转字符串里的单词

题目:leetcode.cn/problems/re…

类型:中等

给定一个字符串,逐个翻转字符串中的每个单词。

示例 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之类的。

在反转字符串中,双指针法在数组、链表、字符串中很常用。

字符串类类型的题目,往往想法比较简单,但是实现起来并不容易,复杂的字符串题目非常考验对代码的掌控能力。

双指针法是字符串处理的常客。