给你一个字符串 s ,逐个翻转字符串中的所有 单词 。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。
说明:
输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
翻转后单词间应当仅用一个空格分隔。
翻转后的字符串中不应包含额外的空格。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.Scanner;
class Solution {
private void swap(StringBuilder sb, int a, int b) {
char t = sb.charAt(a);
sb.setCharAt(a, sb.charAt(b));
sb.setCharAt(b, t);
}
private void reverse(StringBuilder sb, int start, int end) {
while (start < end) {
swap(sb, start++, end--);
}
}
public String reverseWords(String s) {
StringBuilder sb = new StringBuilder();
for (int i = s.length() - 1; i >= 0; --i) {
if (s.charAt(i) != ' ') {
sb.append(s.charAt(i));
} else if (sb.length() != 0 && sb.charAt(sb.length() - 1) != ' ') {
sb.append(" ");
}
}
if (sb.charAt(sb.length() - 1) == ' ') {
sb.deleteCharAt(sb.length() - 1);
}
int left = 0;
for (int i = 1; i < sb.length(); ++i) {
if (sb.charAt(i) == ' ') {
reverse(sb, left, i - 1);
left = i + 1;
}
}
reverse(sb, left, sb.length() - 1);
return sb.toString();
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
System.out.println(new Solution().reverseWords(in.nextLine()));
}
}
}