有长度m(>3)的字符串M,另有n个3个字符长度的子字符串,可以是重叠的,(如123,231,),
分解字符串M,搜索与子字符串一样的字符串个数,并找出最多的分解方法。
#include<iostream>
using namespace std;
char m[100][4];
char b[1000];
int c[997];
int strcpy1(char *s1,char *s)
{
int i,j,count=0,count1=0,k;
int flag[3]={0};
for(i=1;i<=strlen(s)/3;i++)
{
for(k=(i-1)*3;k<i*3;k++)
{
for(j=0;j<strlen(s1);j++)
{
if(s[k]==s1[j]&&!flag[j])
{
break;
}
}
if(j<strlen(s1))
count++;
}
if(count==3)
{
memset(flag,0,3);
count=0;
count1+=1;
}
else
{
count=0;
}
}
return count1;
}
int main()
{
int n,i,j,max=0,m1=0;
cin>>n;
for(i=0;i<n;i++)
cin>>m[i];
cin>>b;
for(j=0;j<strlen(b)-3;j++)
{
for(i=0;i<n;i++)
{
m1+=strcpy1(m[i],b+j);
}
if(m1>max)
{
max=m1;
}
m1=0;
}
cout<<max<<endl;
return 0;
}