/**
* @Task:Given an input string,reverse the string word by word.
* For example,
* Given s="my name is black",
* return "black is name my".
*/
package black.algorithm.reverse;
import java.util.Stack;
public class Reverse {
public static String toReverse(String in){
//存放单词的栈
Stack<Character> word=new Stack<Character>();
//存放句子的栈
Stack<Character> sentence=new Stack<Character>();
//存放逆序后的字符串
StringBuilder out=new StringBuilder();
//字符串索引
int i=0;
while(i<=in.length()){
//遇到空格
if(i==in.length()||in.charAt(i)==' '){
if(!word.isEmpty()){
//将word栈中一个单词转移到sentence栈中
while(!word.isEmpty()){
sentence.push(word.pop());
}
//sentence栈中添加空格,即为单词之间添加空格
if(!sentence.isEmpty()){
sentence.push(' ');
}
}
}else{
//将给定字符串中的字符一个一个放进栈中
word.push(in.charAt(i));
}
//字符串索引自增
i++;
}
while(!sentence.isEmpty()){
out.append(sentence.pop());
}
return out.toString();
}
public static void main(String[] args) {
String input="my name is black";
String output=toReverse(input);
System.out.println(output);
}
}
运行结果: