2014年阿里研发笔试题:在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度
2015-03-15 18:36
519 查看
http://www.cnblogs.com/zhangchaoyang/articles/2012070.html
讲的比较详细
题目描述:给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。
思想:用vector建立一个二维向量markMatrix,markMatrix[i][j]表示最长连续字母以query[i]结尾时的长度,
讲的比较详细
题目描述:给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。
思想:用vector建立一个二维向量markMatrix,markMatrix[i][j]表示最长连续字母以query[i]结尾时的长度,
#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,0)); // 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; }
//第二种方法,压缩空间,注意:
<pre name="code" class="cpp">int main() { string text = "acddef"; string query = "cdd"; int tlen = text.length(); int qlen = query.length(); int* dp = new int[qlen]; int maxlen = -1; int maxInd = -1; memset(dp, 0, sizeof(int)*qlen); for (int i = 0; i < tlen;++i) for (int j = qlen - 1; j >= 0; --j) { if (text[i] == query[j]) { if (i == 0 || j == 0) dp[j] = 1; else { dp[j] = dp[j - 1]+1; } } else { dp[j] = 0; } if (dp[j] > maxlen) { maxlen = dp[j]; maxInd = j; } } cout << maxlen <<","<< maxInd << endl; for (int i = maxInd - maxlen + 1; i <= maxInd; ++i) cout << query[i]; cout << endl; }
相关文章推荐
- 阿里14年机试-----在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度
- 在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度
- [阿里2015校招笔试]求字符串query和text最长连续字母序列的长度
- 最长连续字母序列的长度(阿里2015在线研发工程师笔试题)
- 在一个字符串中找出以同样的顺序连续出现在另一个字符串中的最长连续字符串的长度
- 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱).
- 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱). 第二解
- Java字符串编程--最长连续字母序列的长度
- ALBB 找公共最长连续字母序列的长度
- 求最长连续相同的字母序列长度
- 最长连续字母序列的长度
- ALBB 找公共最长连续字母序列的长度
- 字符串笔试题1:找出子串在字符串中出现的次数,子串中的字符可以不连续,但顺序固定
- E 绝对半径2051 最长的连续相同序列的长度
- 2014年阿里巴巴在线笔试题-第3大题-公共最长字符串长度
- 无序整形数组,如何找到最长连续序列长度,时间复杂度O(n)
- 128. Longest Consecutive Sequence *HARD* -- 寻找无序数组中最长连续序列的长度
- 找出顺序表中连续最长的拿个数
- E 绝对半径2051 最长的连续相同序列的长度
- ZOJ 3790 Consecutive Blocks 最多删k个数求最长连续相同序列长度