题解 | #单词倒排#
单词倒排
http://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836
一种实用的方法
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine();
int len = str.length();
StringBuilder sb = new StringBuilder();
StringBuilder ans = new StringBuilder();
//对输入的字符串进行整理,将所有非字母替换成空格,存放到 sb 中
for(int i = 0; i < len; i++){
if(Character.isLetter(str.charAt(i))){
sb.append(str.charAt(i));
}else{
sb.append(" ");
}
}
//开始定义指针遍历字符串
int len_sb = sb.length();
int left = 0, right = len_sb - 1;
while(sb.charAt(left) == ' '){ //将最左边的空格清除
left++;
}
while(sb.charAt(right) == ' '){ //将最右边的空格清除
right--;
}
//开始遍历,反转单词
while(left <= right){
int index = right;
while(index >= left && sb.charAt(index) != ' '){ //确定单词的开始位置
index--;
}
for(int i = index + 1; i <= right; i++){ //将单词加入到 ans 中
ans.append(sb.charAt(i));
}
if(index > left){ //如果没有到最左边,就在每个单词右边添加空格
ans.append(' ');
}
while(index >= left && sb.charAt(index) == ' '){ //找到每个单词的结束位置
index--;
}
right = index;
}
System.out.print(ans.toString());
}
}
}