水下功夫做透,水上才能顺风顺水。

最长回文子串

动态方程:
d[i][j] = (a[i]=a[j])&&d[i+1][j-1]

public
String longestPalindrome(String str) { if (str==null||str.length()==1) { return str; } int len = str.length(); boolean[][] dp = new boolean[len][len]; //默认值是false String res = str.substring(0,1); //[0,1) for (int j=0; j<len; j++){ for (int i=0; i<=j; i++){//从i到j,必然i<=j。i在内,也必然先有j。被依赖方在外层,依赖方在内层 char head = str.charAt(i); char tail = str.charAt(j); //j-i=0,单个元素,一定回文。 //j-i=1,两个元素相等,一定回文。 //j-i=2,三个元素,两边元素相等,一定回文。 //两边相等,中间回文,一定回文。 dp[i][j] = (head==tail) && (j-i <= 2 || dp[i+1][j-1]); if (dp[i][j]){ if (j-i+1 > res.length()){ res = str.substring(i, j + 1); } } } } return res; }

 

posted @ 2022-03-05 19:57  北方寒士  阅读(24)  评论(0编辑  收藏  举报