查詢兩個字串a,b中的最長公共子串
阿新 • • 發佈:2019-01-26
#include<iostream> #include<string> using namespace std; string iQueryMaxCommString(string s1, string s2); int main(){ string strA, strB; cin>>strA>>strB; cout << iQueryMaxCommString(strA, strB) <<endl; return 0; } string iQueryMaxCommString(string s1, string s2){ int flag = 1; string maxlen; string null = "null"; int len1 = s1.length(); int len2 = s2.length(); if(len1 == 1){ if(s2.find(s1) != s2.npos) return s1; else return null; } if(len2 == 1){ if(s1.find(s2) != s1.npos) return s2; else return null; } if(len1 > len2){ //cout<<"----------len1 > len2----------"<<endl; for(int i = 0; i < len2 - 1; i++){ for(int j = 1; j <= len2; j++){ string temp = s2.substr(i, j - i); if(s1.find(temp) != s1.npos){ flag = 0; if(temp.length() > maxlen.length()) maxlen = temp; } } } //cout<<"flag = "<<flag<<endl; //cout<<"maxlen = "<<maxlen<<endl; if(flag == 1) return null; else return maxlen; } else{ //cout<<"----------len1 <= len2----------"<<endl; for(int i = 0; i < len1 - 1; i++){ for(int j = 1; j <= len1; j++){ string temp = s1.substr(i, j - i); if(s2.find(temp) != s2.npos){ flag = 0; if(temp.length() > maxlen.length()) maxlen = temp; } } } //cout<<"flag = "<<flag<<endl; //cout<<"maxlen = "<<maxlen<<endl; if(flag == 1) return null; else return maxlen; } }