如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。 现在给出n个单词,需要统计这个n个单词中有多少种循环单词。
输入描述:
输入包括n+1行: 第一行为单词个数n(1 ≤ n ≤ 50) 接下来的n行,每行一个单词word[i],长度length(1 ≤ length ≤ 50)。由小写字母构成
输出描述:
输出循环单词的种数
示例1 示例2 示例3
输入
5 7 4 picture ast a turepic ats aa icturep tas aaa word tsa aaaa ordw sat
sta
ttt
输出
2 3 4
思路:要解决两个问题1:如何判断是循环单词
(从网上找的思路:把字符串拼接起来,判断是否为拼接字符串的字串)
2:循环单词的长度是一样的
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()) {
int n=scanner.nextInt();
String[] strarr=new String[n];
for(int i=0;i<n;i++) { //输入n个字符串,赋值到字符串数组中
strarr[i]=scanner.next();
}
System.out.println( mathThis(strarr,n));
}
}
private static int mathThis(String[] strarr,int n) {
// TODO Auto-generated method stub
int count=0;
String doubleStrarr;
doubleStrarr=strarr[0]+strarr[0];//拼接字符串
for(int i=0;i<n;i++) {
for(int j=i;j<n;j++) {
if(doubleStrarr.contains(strarr[j])&&(doubleStrarr.length()/2)==strarr[j].length()) {
strarr[j]=" ";//判断是否是循环单词(是否是拼接字符串的字串并且长度是一样的)
} //如果是的话就赋值“ ”
}
if((strarr[i]!=" "&&!doubleStrarr.contains(strarr[i]))||
(strarr[i]!=" "&&!((doubleStrarr.length()/2)==strarr[i].length()))) {
doubleStrarr=strarr[i]+strarr[i];//重新拼接新的字符串
count++;
}
}
return count+1;
}
}