leetcode 5. 最长回文子串【双指针】

字符串类型的题目很多都可以用双指针解决,这题是要在一个字符串中找到最长的回文子字符串,对于回文字符串,我们可以使用中心扩散的方式来寻找。
回文串有两种形式,一种是中心字符为奇数,另一种则是中心字符为偶数。因此采用中心扩散时,需要对两种形式的中心都进行处理,即从单个字符开始扩散和从两个字符开始扩散两种方式。
扩散就是利用双指针不断地向字符串的两端遍历,直到回文字符串条件不成立,终止遍历。

class Solution {
    public String longestPalindrome(String s) {
        int len = s.length()-1;
        if(len<=0)return s;
        String ans = s.substring(0,1);
        int max = 0;
        for(int i=0; i<len; i++){
            String sub1 = sub(s,i,i);
            String sub2 = sub(s,i,i+1);
            if(sub1.length()>max || sub2.length()>max){
                ans = sub1.length()>=sub2.length()?sub1:sub2;
                max = ans.length();
            }            
        }
        return ans;
    }
    public String sub(String s, int i, int j){
        while(i>=0 && j < s.length()){
            if(s.charAt(i) == s.charAt(j)){
                i--;
                j++;
            }else{
                break;
            }
        }
        return s.substring(i+1, j);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值