牛客题解day05

如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如: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;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40707685/article/details/83267852