输入单行英文句子,里面包含英文字母,空格以及,
.
?
三种标点符号,
请将句子内每个单词进行倒序,并输出倒序后的语句。
输入字符串S
,S
的长度1 <= N <= 100
输出逆序后的字符串
标点符号左右的空格 >= 0
,单词间空格 > 0
yM eman si boB.
My name is Bob.
woh era uoy ? I ma enif.
how are you ? I am fine.
遍历字符串,遇到非符号压入栈;遇到符号,将栈中元素全部出栈覆盖原有字符串,并跳过符号开始需要下一个乱序单词。
import java.util.Scanner;
import java.util.Stack;
/**
* Created with IntelliJ IDEA.
* <br>Author: Amos
* <br>E-mail: amos@amoscloud.com
* <br>Date: 2023/1/3
* <br>Time: 8:36
* <br>Description:
*/
public class Main0181 {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
String line = scanner.nextLine();
String res = solution(line);
System.out.println(res);
}
}
private static String solution(String line) {
char[] chars = line.trim().toCharArray();
Stack<Character> stack = new Stack<>();
int start = 0;
for (int i = 0; i < chars.length; i++) {
char cur = chars[i];
if (cur == ' ' || cur == '?' || cur == ',' || cur == '.') {
for (int j = start; j < i; j++) {
chars[j] = stack.pop();
}
start = i + 1;
if (cur != ' ') {
start++;
}
} else {
stack.push(cur);
}
}
for (int j = start; j < chars.length; j++) {
chars[j] = stack.pop();
}
return new String(chars);
}
}