题目:给定任意一个字符串,最大长度1000,计算出最长的回文子串,除了直接得到的外,还可以通过删除某些字符而达到最长,比如“cabbeaf"删除c e f 后剩"abba",这个是原字符串中存在的最长字符串。
例:
输入 :cabbeaf 输出:4 (abba)
输入 :cabiuopjbeaf 输出:4 (abba)
输入 :cabiuuopjbeaf 输出:6 (abuuba)
class Solution {public: int longestPalindrome(string s) { //构造真值表,i,j所对应的字符相等的地方为真 bool f[1000][1000] = {false}; int slen = s.size(); for(size_t i = 0; i < slen; i++) { f[i][i] = true; for (size_t j = 0; j < i; j++) { f[j][i] = (s[j] == s[i]); } } //for(int i = 0; i=0){ if(f[i-row_][k]){ if(row_==0) maxtemp++; else maxtemp += 2; }else{ if((k == slen-1) && (i-row_) >=0 ){ k = i+row_; row_++; } row_--; } } row_++; if((i-row_)<0) break; } if(maxtemp > maxlen) maxlen = maxtemp; } for(int i = 0; i < slen; i++){ int maxtemp = 1; int row_ = 1; for(int k = i+1; k < slen; k++){ if(i-row_>=0){ if(f[i-row_][k]){ if(row_==0) maxtemp++; else maxtemp += 2; }else{ if((k == slen-1) && (i-row_) >=0 ){ k = i+row_; row_++; } row_--; } } row_++; if((i-row_)<0) break; } if(maxtemp > maxlen) maxlen = maxtemp; } return maxlen; }};