题解 | #最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

import java.util.*;

public class Solution { public int getLongestPalindrome(String A) { int len = A.length(); StringBuffer str = new StringBuffer(); for(int i = 0;i < len;i ++){ str.append('#'); str.append(A.charAt(i)); } str.append('#'); char[] ch = str.toString().toCharArray(); int n = ch.length; int[] radius = new int[n]; int mid = 0; int right = 0; int max = 0; for(int i = 0;i < n;i++) { radius[i] = right > i ? Math.min(right - i + 1,radius[2*mid -i]) : 1; while(i + radius[i] < n && i - radius[i] >= 0 && ch[i - radius[i]] == ch[i + radius[i]]){ radius[i] ++; } if(i + radius[i] - 1> right){ right = i + radius[i]-1; mid = i; } max = Math.max(max,radius[i]); } return max -1; // int n = A.length(); // StringBuilder sb = new StringBuilder(); // for(int i = 0;i < n;i++){ // sb.append('#').append(A.charAt(i)); // } // sb.append('#');

// int rmax = 0,mid = 0,ans = 0; // n = n * 2 + 1; // int[] dp = new int[n]; // for(int i = 0;i < n;i++){ // dp[i] = rmax > i ? Math.min(rmax - i + 1,dp[2 * mid - i]) : 1; // while(i + dp[i] < n && i - dp[i] >= 0 && sb.charAt(i + dp[i]) == sb.charAt(i - dp[i])){ // dp[i]++; // }

// if(dp[i] + i - 1 > rmax){ // mid = i; // rmax = i + dp[i] - 1; // }

// ans = Math.max(ans,dp[i]); // }

// return ans - 1; } }

我居南半坡 文章被收录于专栏

多刷题,积蓄力量,欢迎讨论

全部评论

相关推荐

运营你豪哥:简历改改吧-非本、求职意向技术岗、无实习经历、内容空洞 如果简历不爆改的话,应该是会持续崩溃了 1.把你教育经历放最下面去 2.蓝底照片很奇怪哈,感觉还在高中时代,建议白底重新拍一下 3.校园经历没啥必要,收集和反馈同学们对产品的意见,解决学生和老师之间的沟通,企业招聘不看这些哈 好好思考一下简历的设计和你要表达的重点,再去投简历
点赞 评论 收藏
分享
06-18 15:03
重庆大学 运营
运营你豪哥:做一下被打的数据,分析输出优化建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务