给你一个字符串 s ,逐个翻转字符串中的所有 单词 。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。
我的思路:每次遍历到第一个不是空格的字符时,进行循环将整个单词入栈,最终弹栈用空格拼接即可
代码如下:
public String reverseWords(String s) { int length = s.length(); Stack<String> stack = new Stack<>(); int head = 0; while (head < length){ while (head < length && s.charAt(head) == ' '){ head++; } int tail = head + 1; while (tail < length && s.charAt(tail) != ' '){ tail++; } if (tail <= length && head < length){ stack.push(s.substring(head, tail)); } head = tail; } StringBuilder sb = new StringBuilder(); while (!stack.isEmpty()){ String s1 = stack.pop(); sb.append(s1); sb.append(' '); } sb.deleteCharAt(sb.length()-1); return sb.toString(); }
结果:
官方给出了采用String内置Api方法的代码:
class Solution {
public String reverseWords(String s) {
// 除去开头和末尾的空白字符
s = s.trim();
// 正则匹配连续的空白字符作为分隔符分割
List<String> wordList = Arrays.asList(s.split("\\s+"));
Collections.reverse(wordList);
return String.join(" ", wordList);
}
}