欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指 Offer 58 - I. 翻转单词顺序

程序员文章站 2022-04-30 18:26:05
...

题目:

剑指 Offer 58 - I. 翻转单词顺序

leetcode上面这道题与书上有些许不同,leetcode还考虑句子首尾和末尾有空格的情况,以及单词之间存在多个空格。

思路1:

 这道题目的核心就是将单词顺序反转,不是一味地从头到尾将所有英文字母反转。因此可以借助于两个辅助指针,从尾到头进行扫描单词,利用StrinBuilder的append函数倒序地添加字符串中的单词。String的trim函数用于剔除字符串首尾的空格。

代码:

class Solution {
    public String reverseWords(String s) {
        s = s.trim();
        int i = s.length() - 1, j = i;
        StringBuilder res = new StringBuilder();
        while (i >= 0) {
            while (i >=0 && s.charAt(i) != ' ') i--;//找到第一个空格,即单词的首字母前一个位置
            res.append(s.substring(i + 1, j + 1) + " ");
            while (i >= 0 && s.charAt(i) == ' ') i--;//寻找到下一个单词的尾字母
            j = i;
        }
        return res.toString().trim();
    }
}

思路2:

先剔除字符串首尾的空格,然后利用split()函数,根据空格划分,返回一个String[]数组。然后用循环,从尾部到头部顺序添加单词。注意,单词之间有n个空格时,数组中会产生n-1个""空字符串。所以循环中,遇到""时直接跳过即可。

代码:

class Solution {
    public String reverseWords(String s) {
        String[] tmp = s.trim().split(" ");
        StringBuilder res = new StringBuilder();
        for (int i = tmp.length - 1; i >= 0; i--) {
            if (tmp[i].equals("")) continue;
            res.append(tmp[i] + " ");
        }
        return res.toString().trim();
    }
}

 题解链接:https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/solution/mian-shi-ti-58-i-fan-zhuan-dan-ci-shun-xu-shuang-z/

 

相关标签: 剑指offer