LeetCode第五题:Longest Palindromic Substring

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

Example 1:

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

Example 2:

Input: "cbbd"
Output: "bb"

题意就是给一个字符串,找到子串中最大的对称字符串。
我的想法就是分为两种情况,奇数情况和偶数,从其中一个字符或者两个字符往前后两个方向进行扫描。
public String longestPalindrome(String s) {
        String longestPalindrome = "";
        for (int i = 0; i < s.length(); i++) {
            //奇数情况
            int pre = i;
            int next = i;
            String s1 = getLongestPalindromeByIndex(pre, next, s);
            //偶数情况
            next++;
            String s2 = getLongestPalindromeByIndex(pre, next, s);
            s1 = s1.length() > s2.length() ? s1 : s2;
            longestPalindrome = longestPalindrome.length() >= s1.length() ? longestPalindrome : s1;
        }
        return longestPalindrome;
    }

    public static String getLongestPalindromeByIndex(int pre, int next, String s) {
        while (pre >= 0 && next < s.length() && s.charAt(pre) == s.charAt(next)) {
            pre--;
            next++;
        }
        //当退出循环时,说明当前pre和next不相等,从pre+1截取到next-1
        return s.substring(pre + 1, next);
    }

  这个代码有一个问题,就是产生了很多无用的字符串,其实可以将返回值变成start和end也就是开始索引和结束索引,

但是我感觉这样写可读性好一点。

转载于:https://www.cnblogs.com/zhandouBlog/p/9314766.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值