共三道算法题
1.求最大子矩阵和
2.求最长回文字串
- o(n^2) 动态规划,用s[i][j]表示从i到j是最长回文字串,用一个table[i][j]记录字符串从i到j是否为回文,这样的话,从底部向上,table[i][i]=true;另外如果s[i]==s[i+1],则table[i][i+1]=true,然后长度从3开始,如果s[i-1]==s[j+1],则就能够推出s[i-1][j+1]的字符串了。代码如下:
string longestPalindromeDP(string s) { int n = s.length(); int longestBegin = 0, maxLen = 1; bool table[1000][1000] = {false}; for (int i=0; i<n; i++) table[i][i] = true; for (int i=0; i<n-1; i++) { if (s[i] == s[i+1]) { table[i][i+1] = true; longestBegin = i; maxLen = 2; } } /*依次求table[i][i+2]...table[i][i+n-1]等*/ for (int len=3; l