题解 | #单词倒排#

单词倒排

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来得到一个合法的分割,由于在最开始的时候,已经在最后加上一个非字母,故最后一个单词也可以这样得到

全部评论

相关推荐

头像
2025-12-27 13:01
三峡大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务