力扣题(4):最长回文字符串

原题
给你一个字符串 s,找到 s 中最长的 回文 子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
解题:本题是我目前位置唯一直接想到思路的一道题
遍历每个数字,向左向右判断指针,判断是都和当前位置一样,一样的话直接给指针+|-,方法叫中心扩展法
代码:

package test005;

import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要判断的字符串:");
        String s = sc.nextLine();
        String maxS = longestPalindrome(s);
        System.out.println("最长回文字符串是:"+maxS);
    }
    public static String longestPalindrome(String s) {
        if (s==null || s.length()==0){
            return "";
        }
        int start = 0;
        int end = 0;
        int len = 1;
        int maxLen = 0;
        int maxStart = 0;
        for (int i = 0; i < s.length(); i++) {
            start = i-1;
            end = i+1;
            //判断左侧
            while(start>=0 && s.charAt(start)==s.charAt(i)){
                start--;
                len++;
            }
            //判断右侧
            while(end<s.length() && s.charAt(end)==s.charAt(i)){
                end++;
                len++;
            }
            //两侧都判断
            while (start>=0 && end<s.length() && s.charAt(start)==s.charAt(end)){
                start--;
                end++;
                len+=2;
            }
            if (len>maxLen){
                maxLen = len;
                maxStart = start;
            }
            len = 1;
        }
        return s.substring(maxStart+1,maxStart+maxLen+1);
    }

}

总结:该题的关键还是对函数指针的使用

你可能感兴趣的:(难度简单,算法题,leetcode,java,算法)