1. 程式人生 > >ALBB 找公共最長連續字母序列的長度

ALBB 找公共最長連續字母序列的長度

表示 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 找公共最長連續字母序列的長度