乐趣区

关于java:LeetCode151翻转字符串里的单词

翻转字符串里的单词

题目形容:给你一个字符串 s,一一翻转字符串中的所有 单词。

单词 是由非空格字符组成的字符串。s 中应用至多一个空格将字符串中的 单词 分隔开。

请你返回一个翻转 s 中单词程序并用单个空格相连的字符串。

阐明:

  • 输出字符串 s 能够在后面、前面或者单词间蕴含多余的空格。
  • 翻转后单词间该当仅用一个空格分隔。
  • 翻转后的字符串中不应蕴含额定的空格。

示例阐明请见 LeetCode 官网。

起源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl…
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。

解法一:字符串遍历

首先,如果字符串 s 是空串或者只由空格组成,则间接返回空串。

否则,首先将 s 去掉前后的空格,遍历字符串 s,申明一个单词列表 words 用来记录遍历到的单词,一个长期办理 lastChar 记录上一个字符,lastChar 初始化为空格,遍历过程如下:

  • 如果以后字符和上一个字符都是空格,则跳过解决下一个字符;
  • 如果以后字符是空格而上一个字符不是空格,阐明上一个字符是以后单词的完结符号,将该单词增加到单词列表中;
  • 如果以后字符不是空格而上一个字符是空格,阐明以后字符是单词的开始符号;
  • 如果以后字符和上一个字符都不是空格,阐明以后单词并未完结。

遍历完结后,将以后最初一个单词增加到单词列表 words 中,而后应用 Collections.reverse 办法将单词列表 words 逆序排列,最初应用 String.join(" ", words) 办法将单词用空格离开连接起来并返回。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class LeetCode_151 {public static String reverseWords(String s) {if (s == null || s.length() == 0 || s.trim().length() == 0) {return "";}
        List<String> words = new ArrayList<>();
        s = s.trim();
        StringBuilder curWord = new StringBuilder();
        char lastChar = ' ';
        for (int i = 0; i < s.length(); i++) {char curChar = s.charAt(i);
            if (curChar == '' && lastChar ==' ') {
                // 如果以后字符和上一个字符都是空格,则跳过解决下一个字符
                continue;
            } else if (curChar == '' && lastChar !=' ') {
                // 如果以后字符是空格而上一个字符不是空格,阐明上一个字符是以后单词的完结符号,将该单词增加到单词列表中
                words.add(curWord.toString());
                curWord = new StringBuilder();
                lastChar = ' ';
            } else if (curChar != '' && lastChar ==' ') {
                // 如果以后字符不是空格而上一个字符是空格,阐明以后字符是单词的开始符号
                curWord.append(curChar);
                lastChar = curChar;
            } else if (curChar != '' && lastChar !=' ') {
                // 如果以后字符和上一个字符都不是空格,阐明以后单词并未完结
                curWord.append(curChar);
                lastChar = curChar;
            }
        }
        words.add(curWord.toString());

        Collections.reverse(words);
        return String.join(" ", words);
    }

    public static void main(String[] args) {
        // 测试用例,冀望输入后果:// bob like even not does Alice
        System.out.println(reverseWords("Alice does not even like    bob"));
    }
}

【每日寄语】做人要一直的往前走,难免会跌倒然而要爬起来再跑,再跌倒再爬起来,做人就是这样的。

退出移动版