方正面试的题-找出字符串最多的分解方法

有长度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;
}

你可能感兴趣的:(方正面试的题-找出字符串最多的分解方法)