51Nod-1347——暑假训练第一场(D)

问题描述:

S0...n−10...n−1是一个长度为n的字符串,定义旋转函数Left(S)=S1…n−11…n−1+S00.比如S=”abcd”,Left(S)=”bcda”.一个串是对串当且仅当这个串长度为偶数,前半段和后半段一样。比如”abcabc”是对串,”aabbcc”则不是。

现在问题是给定一个字符串,判断他是否可以由一个对串旋转任意次得到。

Input

第1行:给出一个字符串(字符串非空串,只包含小写字母,长度不超过1000000)

Output

对于每个测试用例,输出结果占一行,如果能,输出YES,否则输出NO。

Sample Input

aa
ab

Sample Output

YES
NO

题解

如果一个串是对串,那么不管它怎么旋转还是对串,所以,如果所给的串不是对串的话,就无法从对串旋转得到。因此判断所给串是否为对串即可。

Java  AC代码

import java.util.*;
public class Main
{
	public static void main(String args[])
	{
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext())
		{
			String str = sc.next();
			char a[] = str.toCharArray();
			boolean flag = true;
			int len = a.length;
			if(len % 2 == 1)
			{
				System.out.println("No");
				break;
			}
			for(int i = 0;i < len / 2;i++)
			{
				if(a[i] != a[i + len / 2])
				{
					flag = false;
					break;
				}
			}
			if(flag)
			{
				System.out.println("Yes");
			}
			else
			{
				System.out.println("No");
			}
		}
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39898553/article/details/81414374