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