ALBB 找公共最長連續字母序列的長度
阿新 • • 發佈:2017-07-27
表示 text 應該 tex article fin 長度 class rgb
問題描寫敘述
給定一個 query 和一個 text 。均由小寫字母組成。要求在 text 中找出以相同的順序連續出如今 query 中的最長連續字母序列的長度。
比如, query為“acbac”。text為“acaccbabb”,那麽text中的“cba”為最長的連續出如今query中的字母序列,因此,返回結果應該為其長度3。請註意程序效率。
代碼思想
1、遍歷兩字符串的每個元素,遇見同樣元素則計算該次同樣次數同樣元素數目。並與之前最大值比較,遍歷結束即得到終於相似元素數目。
2、用vector建立一個二維向量markMatrix,markMatrix[i][j]表示query中第i個字符和text中第j個字符的最長連續字母序列的長度。
源代碼實現
#include<iostream> using namespace std; int len(char *query,char *text) //求兩個字符串的連續公共部分子函數,返回公共字符串長度; { int i; for(i=1;query[i]!='\0'&&text[i]!='\0';i++) if(query[i]!=text[i]) break; return(i); } int main() { // char query[100],text[100]; char *query,*text; int i,j,max=0,lenth=0; // cout<<"please input query:"<<endl; // cin>>query; query = "acbac"; // cout<<"please input text"<<endl; // cin>>text; text = "acaccbabb"; for(i=0;query[i]!='\0';i++) { for(j=0;text[j]!='\0';j++) { if(query[i]==text[j]) { lenth=len(&query[i],&text[j]); if(max<lenth) max=lenth; //i+=lenth-1; } } } printf("the longth of the same max string is %d\n",max); return(max); }
STL 實現
#include<iostream> #include<string> #include<vector> using namespace std; int FindMaxLength(string query, string text) { int m = query.length(); int n = text.length(); vector<vector<int> > markMatrix(m,vector<int>(n)); // m行n列的矩陣 int i = 0, j = 0; int maxLen = -1; for (i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (query[i] == text[j]) { if (i == 0 || j == 0) { markMatrix[i][j] = 1; } else { markMatrix[i][j] = markMatrix[i - 1][j - 1] + 1; } } if (markMatrix[i][j] > maxLen) maxLen = markMatrix[i][j]; } } return maxLen; } void main() { string query; string text; /* cout << "輸入query 和 text : " << endl; cin >> query; cin >> text; */ query = "acbac"; text = "acaccbabb"; int maxLength = FindMaxLength(query,text); cout << "最大公共長度為: " <<maxLength<< endl; }
ALBB 找公共最長連續字母序列的長度