最长公共子串_暴力解法(不会正解)

最长公共子串 lcs.cpp/.in/.out

计算两个字符串的最大公共子串(Longest Common Substring)的长度,字符不区分大小写,这里的最大公共子串要求的字串是连续的。

输入:

两行,每行一个字符串,字符串长度<=1000.

输出:

输出一个整数,表示公共子串的长度。

样例输入:

asdfas

werasdfaswer

样例输出:

6

下面上代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char o[300],k[300];
 4 int main()
 5 {
 6 //    freopen("lcs.in","r",stdin);
 7 //    freopen("lcs.out","w",stdout);
 8     scanf("%s",&o);
 9     scanf("%s",&k);
10     int long_1=0,long_2=0;
11     while(o[long_1]!='\0')
12     {
13         long_1++;//数组长度(1)
14     }
15     while(k[long_2]!='\0')
16     {
17         long_2++;//数组长度(2)
18     }
19     int maxx=0;
20     for(int u=0;u<long_1;u++)//第一个数组的初始位置
21     {
22         for(int u2=0;u2<long_2;u2++)//第二个数组的初始位置
23         {
24             if(o[u]==k[u2])//如果初始位置处相同,就往后while循环找最长的相同长度
25             {
26                 int now_long=1;
27                 while(o[u+now_long]!='\0'&&k[u2+now_long]!='\0'&&(o[u+now_long]==k[u2+now_long]||o[u+now_long]+'A'-'a'==k[u2+now_long]||o[u+now_long]-'A'+'a'==k[u2+now_long]))//判断是否到行尾以及是否大小写
28                 {
29                     now_long++;//如果相同
30                 }
31                 maxx=max(maxx,now_long);//长度更新
32             }
33         }
34     } 
35     cout<<maxx;
36 }

猜你喜欢

转载自www.cnblogs.com/OI-xyf/p/10321211.html