最长公共子串_暴力解法 36行
最长公共子串 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 }