题解 | #单词倒排#
单词倒排
https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836
import java.util.Scanner;
import java.util.ArrayList;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String input = in.nextLine();
input += " "; // 在最后加上一个非字母字符即可,如空格,冒号之类的
ArrayList<String> ss = new ArrayList<String>(); // 存储分割后的单词
int len = 0; // 计数器
for(int i = 0;i < input.length();++i){ // 遍历
char ch = input.charAt(i); // 当前字符
if((ch >= 'a' && ch <= 'z') ||(ch >= 'A' && ch <= 'Z')){ // 大小写字符
++len; // 计数器加一
} else{ // 非大小写字符
ss.add(input.substring(i - len, i)); // 计算得到单词
len = 0; // 计数器归零
}
}
for(int i = ss.size() - 1;i >= 1;--i){ // 倒序输出
System.out.print(ss.get(i) + " ");
}
if(ss.size() > 0) System.out.print(ss.get(0)); // 输出最后一个,因为最后一个后没有空格
}
}
}
先读取字符串,在字符串最后加上一个" ",以便接下来的遍历切割,使用ArrayList来储存合法单词,在遍历字符串时,如遇到大小写字母,当前计数器len加一,否则,根据当前的下标以及计数器len来得到一个合法的分割,由于在最开始的时候,已经在最后加上一个非字母,故最后一个单词也可以这样得到
查看4道真题和解析