LeetCode-最长回文子串(5)

题目描述:

给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
LeetCode-最长回文子串(5)_第1张图片
思路: 看到这题我就想到要先写一个判断字符串是否为回文串的函数来辅助解题。然后解题的主要思路就是套两层循环得到输入字符串的各种可能子串,判断每个字串是否为回文串,如果是则记录长度,记录子串地址,到下一个字串就将其长度与记录的长度进行比较,如果比记录的长度长,则更新长度并且更新子串地址,这里记录的长度及地址就是最终需要的最长回文子串的长度和地址。具体细节看代码。
代码:

class Solution {
    public String longestPalindrome(String s) {
        if(s.length()==0 || s.length()==1) {
            return s;
        }
        String longestStr=null;
        int longest=0;
        for(int i=0;i<s.length();i++) {
            for(int j=i+1;j<=s.length();j++) {
                String temp=s.substring(i,j);
                if(isPalindrome(temp)) {
                    int len=temp.length();
                    if(len>=longest) {
                        longest=len;
                        longestStr=temp;
                    } 
                }
            }
            
        }
        return longestStr;


    }

    public boolean isPalindrome(String s) {
        int right=s.length()-1;
        int left=0;
        while(left<right) {
            if(s.charAt(right)!=s.charAt(left)) {
                return false;
            }
            right--;
            left++;
        }
        return true;
    }
}

我写的代码可以说是暴力解法,效率很低但是能通过,官方解法涉及到动态规划等知识还未理解,暂时搁置。

你可能感兴趣的:(leetcode,算法)