2018-5-12
如何判断一个字符串是否包含连续重复子串呢?
我们可以检查所有长度为偶数的子串,判断每一个子串的前半部分是否与后半部分相同,但是实际上我们只需每一次判断当前串的后缀即可,因为前面的我们已经在前面判断过了。就好像八皇后问题一样,我们只需要当前放置的皇后是否满足题意即可,而不必考虑之前的皇后了。
#include<iostream>
using namespace std;
const int N = 100;
char x[N+1];
int k,l,cnt;
void dfs(int step){
if (cnt>k) return ;
if (cnt==k){
for (int i=0;i<step;i++){
cout<<x[i];
if (i%4==3&&i!=step-1) cout<<" ";
}
cout<<endl<<step<<endl;
return ;
}
for (int i=0;i<l;i++){
x[step]=i+'A';
bool f1=false;
for (int j=1;2*j<=step+1;j+=1){
bool f2=false;
for (int p=step;p>step-j;p--){
if (x[p]!=x[p-j]){
f2=true;
break;
}
}
if (!f2){
f1=true;
break;
}
}
if (!f1){
cnt++;
dfs(step+1);
}
}
}
int main(){
while (cin>>k>>l){
if (k==0&&l==0) break;
cnt=0;
dfs(0);
}
return 0;
}