赞
踩
【中等】【dp】最长公共子串
描述
给定两个字符串str1和str2,输出两个字符串的最长公共子串
题目保证str1和str2的最长公共子串存在且唯一。
class Solution { public: /** * longest common substring * @param str1 string字符串 the string * @param str2 string字符串 the string * @return string字符串 */ string LCS(string str1, string str2) { // write code here //dp[i][j]表示str1以第i个结尾/str2以第j个结尾的公共子串长度 vector<vector<int>> dp(str1.length()+1, vector<int>(str2.length()+1, 0)); int max = 0; int maxidx = 0; for(int i = 1; i <= str1.length(); i++){ for(int j = 1; j <= str2.length(); j++){ if(str1[i-1] == str2[j-1]){ dp[i][j] = dp[i-1][j-1] + 1; if(dp[i][j] > max){ max = dp[i][j]; maxidx = i - 1; } } else{ dp[i][j] = 0; } } } return str1.substr(maxidx - max + 1, max); } };
时间:O(mn) 遍历了两个字符串
空间:O(mn) 使用dp数组记录当前最大子串长度
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。