【克隆子串】+LeetCode-459. 重复的子字符串

题目描述:

描述
一个字符串A被称为“克隆字符串”,当且仅当存在一个字符串B,使得A=BB. 输入一个字符串S,请判断S中是否至少含有一个子串,这个子串是“克隆字符串”.
输入
输入的第一行是一个整数T(T <= 50),代表输入数据的组数. 每组数据只有一行,包含一个字符串S,S只包含小写字母(‘a’ ~ ‘z’),长度不超过50.

输出
对于每组数据,如果S包含“克隆字符串”,输出YES;否则输出NO。每个输出结果为独立的一行,结尾有换行。

样例输入
3
abab
abcde
zaat
样例输出
YES
NO
YES

解题思路一:暴力

isPair判断是否是BB类型的子串

#include<bits/stdc++.h>
using namespace std;
bool isPair(string s){
	return (s + s).find(s, 1) != s.size();
}
void test(string s){
	for(int i=2;i<=s.size();i=i*2){
		for(int j=0;j<s.size();++j){
			if(isPair(s.substr(j,i))){
				cout<<"YES";
				return;
			}
		}
	}
	cout<<"NO";
}
int main(){
	string s="zaat"; 
	test(s);
	return 0;
}

解题思路二:


解题思路三:


你可能感兴趣的:(LeetCode刷题,c++,leetcode,算法,面试,数据结构)