一,问题描述: 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; } } }运行结果: