2017年校招全国统一模拟笔试(第一场)编程题集合——循环单词

来源:互联网 发布:淘宝推广拉人进群 编辑:程序博客网 时间:2024/04/27 21:53

题目要求:
链:https://www.nowcoder.com/questionTerminal/9d5fbe7750a34d0b91c73943f93b2d7d 来源:牛客网

如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。 现在给出n个单词,需要统计这个n个单词中有多少种循环单词。

输入描述:
输入包括n+1行:
第一行为单词个数n(1 ≤ n ≤ 50)
接下来的n行,每行一个单词word[i],长度length(1 ≤ length ≤ 50)。由小写字母构成

输出描述:
输出循环单词的种数

输入例子:
5
picture
turepic
icturep
word
ordw

输出例子:
2
贴上代码(此代码并非本人所写):

import java.util.ArrayList;import java.util.Scanner;/* * 如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 *  例如:picture 和 turepic 就是属于同一种循环单词。 *   现在给出n个单词,需要统计这个n个单词中有多少种循环单词。 **/public class RoundWord {    public static void main(String[] args) {        /**         * 该解法思想就是,把每个单词所有可能的循环单词都放在一个数据结构中, 可以是List,map,set,数组等等,         * 此处用ArrayList.         * 然后判断下一个单词是否在表中,不在则加入,并把循环种类加1 在的话,则它与之前的单词是同一种循环单词         */        Scanner sc = new Scanner(System.in);        int n = sc.nextInt(); // 第一行为单词个数n(1 ≤ n ≤ 50)        ArrayList<String> list = new ArrayList<>();        int count = 0;        for (int i = 0; i < n; i++) {            String s = sc.next(); // 输入并存储每行的单词。此处必须调用next()方法,不能是nextLine()方法            if (!list.contains(s)) {                count++;                list.add(s);                for (int j = 0; j < s.length() - 1; j++) {//把每个单词所有可能的循环单词加入到list中                    char last = s.charAt(s.length() - 1);                    s = s.substring(0, s.length() - 1);                    s = last + s;                    list.add(s);                    // 以下注释是另一种方法,把可能的循环单词加入list,                    // 思路:把要测试的单词后再重复下这个单词,如:picture ,变成 picturepicture                    // 感谢得闲半生的idea                    // StringBuffer string = new StringBuffer();                    // string.append(s);                    // string.append(s);                    // String another = string.substring(j, s.length() + j);                    // list.add(another);                }            }        }        sc.close();        System.out.println(count);    }}

PS:按照题目意思,应该每一个单词都是循环单词,并非要出现一对配对的循环单词,即输入:
3
abc picture citurep
输出:
2

0 0