题解 | #MP3光标位置#

公共子串计算

http://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b

#include<iostream>
using namespace std;
#include<string>

int main()
{
    string s1,s2,sh,sl;
    cin>>s1;
    cin>>s2;
    int len1=s1.length(),len2=s2.length(),lenl,lenh;
    //sl为短字符串,sh为长字符串
    if(len1>len2)
    {
       lenh=len1;
        lenl=len2;
        sh=s1;
        sl=s2;
        
    }
    else{
       lenh=len2;
        lenl=len1;
        sh=s2;
        sl=s1; 
    }
    int max1=0,max2=0,k,ii;
    //分三次循环,第一层是短字符串遍历,第二层是长字符串遍历,第三层是while遍历重复的部分,max1为重复部分长度
    //max2为最后的最长重复字符串长度
    for(int i=0;i<lenl;i++)
    {
        
        for(int j=0;j<lenh;j++)
        {
            max1=0;
            ii=i;
            k=j;
            while(1)
            {
                
                if(sl[ii]==sh[k])
                {
                    k++;
                    ii++;
                    max1++;
                }
                else{
                    break;
                }
                if(ii>=lenl||k>=lenh)
                {
                    break;
                }
            }
            if(max1>max2)
            {
                max2=max1;
            }
            
            
        }
        
        
        
    }
    cout<<max2<<endl;
    
    
    
}
    

全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务