ALBB 找公共最长连续字母序列的长度
2017-07-27 09:01
381 查看
问题描写叙述
给定一个 query 和一个 text 。均由小写字母组成。要求在 text 中找出以相同的顺序连续出如今 query 中的最长连续字母序列的长度。
比如, query为“acbac”。text为“acaccbabb”,那么text中的“cba”为最长的连续出如今query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。
代码思想
1、遍历两字符串的每个元素,遇见同样元素则计算该次同样次数同样元素数目。并与之前最大值比較,遍历结束即得到终于相似元素数目。
2、用vector建立一个二维向量markMatrix,markMatrix[i][j]表示query中第i个字符和text中第j个字符的最长连续字母序列的长度。
源代码实现
STL 实现
给定一个 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 找公共最长连续字母序列的长度
- 阿里14年机试-----在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度
- 最长连续字母序列的长度(阿里2015在线研发工程师笔试题)
- 2014年阿里研发笔试题:在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度
- 最长连续字母序列的长度
- 求最长连续相同的字母序列长度
- [阿里2015校招笔试]求字符串query和text最长连续字母序列的长度
- Java字符串编程--最长连续字母序列的长度
- 在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度
- E 绝对半径2051 最长的连续相同序列的长度
- 如何求最长连续公共子序列和最长连续子字符串
- 从一个ab序列中最多改变k个字符找到最长的连续a子串或者b子串长度.【尺取法】
- 求两个字符串的最长的连续公共子串和求两个字符串的公共子序列
- 如何求最长连续公共子序列和最长连续子字符串
- poj3080Blue Jeans(在m个串中找到这m个串的 最长连续公共子序列)
- 获取一个数组中最长的连续的元素序列。例如,给定了[31,6,32,1,3,2],最长的连续的元素序列是[1,2,3],返回其长度3
- Common Subsequence - POJ 1458 最长非连续公共子序列
- 最长公共子序列 最长递增子序列(和) 最长递增公共子序列 最长(连续)子序列乘积(HDU)--dp
- E 绝对半径2051 最长的连续相同序列的长度
- 最大子序列、最长连续公共子串(连续)、最长公共子序列(动态规划)