一,问题描述:
1,如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。例如:picture和turepic就是属于同一种循环单词。现在给出n个单词,需要统计这n个单词中有多少种循环单词。
2,输入格式:
(1) 输入包括n+1行;
(2) 第一行为单词个数n(1<=n<=50)
(3) 接下来的n行,每行一个单词word[i],长度length(1 ≤ length ≤ 50)。由小写字母构成
3,输出描述:
输出循环单词的种数
4,输入例子
5
picture
turepic
icturep
word
ordw
5,,输出例子
2
二,AC了的程序(用Java实现的)
import java.util.*;
public class Test2{
public static void main(String []args)
{
Scanner scan=new Scanner(System.in);
while(scan.hasNext())
{
int n=scan.nextInt();
String []strs=new String[n];
for(int i=0;i<n;i++)
{
strs[i]=scan.next();
}
int sum=xunhuan(strs);
System.out.println(sum);
}
}
public static int xunhuan(String []strs)
{
int sum=0;
int temp=0;
List<String> list=new ArrayList<String>();//使用集合来存储字符串
for(int i=0;i<strs.length;i++)
{
Iterator<String> it=list.iterator();
while(it.hasNext())
{
if(Judgesame(strs[i],(String)it.next()))
{
temp=1; //如果相同的话,直接把temp=1
break;
}
}
if(temp!=1) //temp不等于1,说明该字符串在集合中是不存在,之前没有存储过的。
{
sum++;
list.add(strs[i]);
}
else
{
temp=0;
}
}
return sum;
}
public static boolean Judgesame(String left, String right)//判断两个字符串是否相同
{
int len1=left.length();
int len2=right.length();
if(left==null||len1==0||right==null||len2==0)
{
return false;
}
if(len1!=len2)
{
return false;
}
String str=right.concat(right); //把right字符串连接到right字符串。就变成两倍长的right
if(str.contains(left)) //然后检查一下长字符串包含了短字符串
{
return true;
}else
{
return false;
}
}
}
运行结果: