翻转字符串里的单词
题目形容:给你一个字符串 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 ")); }}
【每日寄语】 做人要一直的往前走,难免会跌倒然而要爬起来再跑,再跌倒再爬起来,做人就是这样的。