Longest Palindromic Substring

来源:互联网 发布:淘宝 夜鹰 编辑:程序博客网 时间:2024/05/17 03:55

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: "babad"Output: "bab"Note: "aba" is also a valid answer.

Example:

Input: "cbbd"Output: "bb"

自己实现的代码
public static String longestPalindrome(String s) {String sb = s.substring(0, 1);int end = s.length();int j = 0;int i = 0;int begin = 1;while (end - begin > (sb.length() >> 1)) {i = j = begin;i--; j++;sb = assignMaxString(s, sb, end, j, i);i = j = begin++;i--;sb = assignMaxString(s, sb, end, j, i);}return sb;}private static String assignMaxString(String s, String sb, int end, int j, int i) {String s0 = null;if (j < end && s.charAt(i--) == s.charAt(j++)) {while (i > -1 && j < end && s.charAt(i) == s.charAt(j)) {i--; j++;};s0 = s.substring(i+1, j);if(sb.length() < s0.length()) {sb = s0;}}return sb;}

官方的代码:
public String longestPalindrome(String s) {    int start = 0, end = 0;    for (int i = 0; i < s.length(); i++) {        int len1 = expandAroundCenter(s, i, i);        int len2 = expandAroundCenter(s, i, i + 1);        int len = Math.max(len1, len2);        if (len > end - start) {            start = i - (len - 1) / 2;            end = i + len / 2;        }    }    return s.substring(start, end + 1);}private int expandAroundCenter(String s, int left, int right) {    int L = left, R = right;    while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {        L--;        R++;    }    return R - L - 1;}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 荨麻疹的分类 分类垃圾桶图片 自然数的分类 近视眼的分类 公司文件分类 橄榄油的分类 化工产品分类 银行卡的分类 颈椎病的分类 化妆品的分类 精神分裂的分类 建筑材料分类 胶质瘤的分类 液压阀的分类 血管瘤的分类 液压油的分类 三角形的分类 抽动症的分类 设计专业分类 忧郁症的分类 工程资质分类 传感器的分类 保险公司分类 白细胞的分类 慢性胃炎的分类 高血压的分类 灭火器的分类 医疗技术分类 神经元的分类 打印机的分类 有机物的分类 肾损伤的分类 起重机的分类 家庭分类垃圾桶 研究生的分类 种类 种类英语 分级基金 基金分红 分红 分红龙