标签:ever ++ equals bsp sub == color ret 判断
1 class Solution { 2 public String longestPalindrome(String s) { 3 if(s.equals("")) return ""; 4 String origin = s; 5 String reverse = new StringBuffer(s).reverse().toString(); 6 int n = s.length(); 7 int[][] str = new int[n][n]; 8 int maxLen = 0; 9 int maxEnd = 0; 10 for(int i = 0; i < n; i++){ 11 for(int j = 0; j < n; j++){ 12 if(origin.charAt(i) == reverse.charAt(j)){ 13 if(i == 0 || j == 0){ 14 str[i][j] = 1; 15 } 16 else{ 17 str[i][j] = str[i - 1][j - 1] + 1; 18 } 19 } 20 if(str[i][j] > maxLen){ 21 int beforeRev = n - 1 - j; //判断倒置前的下标是否相等 例如 s = abc435cba s‘ = abc534cba 22 if (beforeRev + str[i][j] - 1 == i){ //如果相等 才是我们要找的回文串 23 maxLen = str[i][j]; 24 maxEnd = i; 25 } 26 } 27 } 28 } 29 return s.substring(maxEnd - maxLen + 1, maxEnd + 1); 30 } 31 }
今天的日常有点难(一看就懂 一做就废) 大家自行去看看罢 我CV溜了
a | b | a | c | d | |
d | 0 | 0 | 0 | 0 | 1 |
c | 0 | ||||
a | 1 | ||||
b | 0 | ||||
a | 1 |
a | b | a | c | d | |
d | 0 | 0 | 0 | 0 | 1 |
c | 0 | 0 | |||
a | 1 | 0 | |||
b | 0 | 2 | |||
a | 1 | 0 |
a | b | a | c | d | |
d | 0 | 0 | 0 | 0 | 1 |
c | 0 | 0 | 0 | ||
a | 1 | 0 | 1 | ||
b | 0 | 2 | 0 | ||
a | 1 | 0 | 3 |
第五题主要这样一列一列的将原字符和翻转之后的字符进行比较 第一列和第一行置为1
动态规划的转移公式是 dp[i - 1][j - 1] + 1= dp [ i ][ j ] 第一行和第一列除外
如果dp [ i ][ j ] > maxLen的话 则更新最大长度 并且记录起始位置maxEnd
最后 substring 啦 今天有点累 先溜溜球摸鱼了
标签:ever ++ equals bsp sub == color ret 判断
原文地址:https://www.cnblogs.com/doomslayer/p/14105000.html