最长回文子串

找到一个字符串的最长回文子串
我的思路:
回文串的特点:掐头去尾之后还是一个回文串
因此 我们可以使用两个索引,一个从头开始,一个从后边开始。尾部循环一轮,头索引向前推进一格,尾部循环的终止条件是尾部触碰到头部
每当发现这两个索引对应的字符相同时,也就是头尾相同,我们就可以开始进行一轮回文串的判定。
判定的过程是:头尾两个索引不动,再产生两个索引,分别指向头尾索引,这两个子索引对应的字符如果相同,就慢慢靠近,反之退出这一轮回文串的判定。如果发现是回文串,那么终止的条件会是原先左边的子索引大于等于原先右边的子索引。
找到回文串之后,就让它和之前的最长的回文串对比,如果更长则取代之。
之后发现了一个问题是,单个字母的字符串它会返回空,解决方法就是,定义返回串的时候,让返回串等于第一个字符(一个字符也是回文串)

public String longestPalindrome(String s) {
    char[] charArray = s.toCharArray();
    String resStr = charArray[0]+"";
    int index1 = 0;
    int index2 = 0;
    boolean flag = false;
    for (int i = 0; i < s.length(); i++) {
        for(int j = s.length()-1;j>i;j--){
            if(charArray[i]==charArray[j]){
                index1 = i;
                index2 = j;
                while(charArray[index1]==charArray[index2]&&index1<=index2){
                    index1++;
                    index2--;
                }
                if(index1>=index2){
                     flag = true;
                     //找到一个回文子串
                    String temp = s.substring(i, j + 1);
                    if(temp.length()>=resStr.length()){
                        resStr = temp;
                    }
                    break;//在当前i下的找不到更长的了
                }
            }
        }
    }
    return resStr;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值