求兩個公共字串的最長公共子串(C++)
阿新 • • 發佈:2018-12-10
思路:
1.按兩字串長度,兩層迴圈
2.每一次迴圈找出潛在的公共字串
(比較笨的方法,但比較好用,也很清楚,程式碼如下)
#include<iostream> #include<stdio.h> #include<algorithm> #include<string> #include<vector> using namespace std; vector<int> findCommon(string line1, string line2) { int len1 = line1.length(); int len2 = line2.length(); int maxlen = 0; int start_in1 = 0; for (int i = 0; i < len1; i++) { for (int j = 0; j < len2; j++) { if (line1[i] == line2[j]) { int as = i; int bs = j; int count = 1; while (as + 1 < len1&&bs + 1 < len2&&line1[++as] == line2[++bs]) count++; if (count > maxlen) { maxlen = count; start_in1 = i; } } } } vector<int> ans; ans.push_back(maxlen); ans.push_back(start_in1); return ans; } int main() { string line1 = "abcdek"; string line2 = "bcd"; vector<int> out; out = findCommon(line1, line2); for (int i = out[1]; i < out[0] + out[1]; i++) cout << line1[i]; cout << endl; system("pause"); }