题目
如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。 现在给出n个单词,需要统计这个n个单词中有多少种循环单词。
输入描述:
输入包括n+1行:
第一行为单词个数n(1 ≤ n ≤ 50)
接下来的n行,每行一个单词word[i],长度length(1 ≤ length ≤ 50)。由小写字母构成输出描述:
输出循环单词的种数
输入例子:
5picture
turepic
icturep
word
ordw输出例子
2
思路描述:
- 首先建立两个List数据,一个保存输入的单词例子,一个作为统计list,初始时将第一个单词作为统计list的第一个数据,
- 然后遍历保存list逐个进行和统计list作为对比,看是否是循环单词,如果是那就停止对比进行下一个单词对比,如果不是,则将该单词加入统计list。
具体代码如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
List<String> lsit = new ArrayList<>();
for (int i = 0; i < n; i++) {
lsit.add(scanner.next());
}
List<String> count = new ArrayList<>();
count.add(lsit.get(0));
//遍历输入的单词
for (int i = 1; i < n; i++) {
boolean tag = true;
//看统计list的数据是否是该字符串的循环单词
for (int j = 0; j < count.size(); j++) {
if (youxi(lsit.get(i),count.get(j))) {
tag = false;
break;
}
}
//如果不是就给统计list中添加
if (tag) {
count.add(lsit.get(i));
}
}
System.out.println(count.size());
}
/**
* a,是否是s的循环单词
* @param s
* @return
*/
public static boolean youxi(String s,String a){
char[] arr = s.toCharArray();
List<String> ls = new ArrayList<>();
String ss = "";
for (int i = 0; i < arr.length; i++) {
ss+=arr[i];
ls.add(s.replaceFirst(ss, "")+ss);
}
if (ls.contains(a)) {
return true;
}
return false;
}
}