【发布时间】:2016-03-27 07:26:02
【问题描述】:
我已经制定了解决方案,但我需要一个优化的解决方案。任务是:
- 读取两个字符串
- 获取第一个字符串的每个子字符串并在第二个字符串中找到每个子字符串
- 如果存在,打印“是”,否则打印“否”
我已经提出的解决方案:
int check(string A, string B)
{
string s3;
int flag=0 ,len1,len2,k=0;
s3[0]='\0';
cin>>A>>B;
len1=A.length();
len2=B.length();
for(int i=0;i<len1;i++)
{
k=len1-i;
for(int j=1;j<k;j++ )
{
s3=A.substr(i,j);
size_t found=B.find(s3);
if(found!=string::npos)
{
flag=1;
return flag;
}
}
}
}
【问题讨论】:
-
在此处粘贴代码时,请保持/使格式(缩进)正确,以便代码可读。
-
所需的最小公共子串长度是多少?我们可以说一个共同的字符是共同的 somestring
-
你试过搜索“最长公共子串问题”吗?
-
如果子字符串没有长度限制,那么你可以一直打印 yes,因为空字符串是所有字符串对的公共子字符串。
-
没有必要检查所有可能的子字符串(O(n^2)),因为如果一个子字符串对两个字符串都是公共的,那么它的所有子字符串也是公共的(即使是单个字符)。因此,只检查常见字符就足够了。
标签: c++ string algorithm find substring