学习目标:
目标:熟练运用Java所学知识
学习内容:
本文内容:使用java解决 反转单词顺序
题目描述
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a
student. “,则输出"student. a am I”。
示例 1:
输入: “the sky is blue”
输出: “blue is sky the”
示例 2:
输入: " hello world! "
输出: “world! hello”
解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: “a good example”
输出: “example good a”
解释:如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
解题思路
- 反转单词顺序,可以使用到栈,栈正好是一个先进后出的数据结构,可以做到反转顺序的操作
- 接下来就是如何入栈了,我们可以使用while遍历,使用start和end记录每个单词的开始和结束位置,将他们依次入栈
- 出栈的时候,使用StringBuffer对象调用append()函数将字符串拼接
实现代码
public class ReverseWord {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
System.out.println(reverse(str));
}
public static String reverse(String str){
Stack<String> stack=new Stack<>();//创建栈
int length=str.length();
int start=0;
int end=0;
while(end<length){
while(end<length&&str.charAt(end)!=' '){
//循环直到end位置是空格
end++;
}
stack.push(str.substring(start,end));//向栈中压入单词
while(end<length&&str.charAt(end)==' '){
//end遍历到下一个单词的开始位置
end++;
}
start=end;//让start等于下一个单词的开始位置,进行下次遍历
}
StringBuffer strBuf=new StringBuffer();
while(!stack.isEmpty()){
strBuf.append(stack.pop()+' ');
}
return (new String(strBuf)).trim();
}
}