首页 > 其他分享 >5. 最长回文子串

5. 最长回文子串

时间:2023-05-28 23:55:15浏览次数:36  
标签:子串 right start length 回文 最长 left

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

 

class Solution {
    public static String longestPalindrome(String s) {
        //边界条件判断
        if (s.length() < 2)
            return s;
        //start表示最长回文串开始的位置,
        //maxLen表示最长回文串的长度
        int start = 0, maxLen = 1;
        int length = s.length();
        boolean[][] dp = new boolean[length][length];
        for (int right = 1; right < length; right++) {
            for (int left = 0; left < right; left++) {
                //如果两种字符不相同,肯定不能构成回文子串
                if (s.charAt(left) != s.charAt(right))
                    continue;

                //下面是s.charAt(left)和s.charAt(right)两个
                //字符相同情况下的判断
                //如果只有一个字符,肯定是回文子串
                if (right == left) {
                    dp[left][right] = true;
                } else if (right - left <= 2) {
                    //类似于"aa"和"aba",也是回文子串
                    dp[left][right] = true;
                } else {
                    //类似于"a******a",要判断他是否是回文子串,只需要
                    //判断"******"是否是回文子串即可
                    dp[left][right] = dp[left + 1][right - 1];
                }
                //如果字符串从left到right是回文子串,只需要保存最长的即可
                if (dp[left][right] && right - left + 1 > maxLen) {
                    maxLen = right - left + 1;
                    start = left;
                }
            }
        }
        //截取最长的回文子串
        return s.substring(start, start + maxLen);
    }
}

 

标签:子串,right,start,length,回文,最长,left
From: https://www.cnblogs.com/leehl8016/p/17439211.html

相关文章

  • LeetCode 周赛 347(2023/05/28)二维空间上的 LIS 最长递增子序列问题
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。往期回顾:LeetCode单周赛第346场·仅68人AK的最短路问题周赛347概览T1. 移除字符串中的尾随零(Easy)标签:模拟、字符串T2.对角线上不同值的数量差(Easy)标签:前后缀分解T3.使所有字符......
  • 2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两
    2023-05-27:给你一个只包含小写英文字母的字符串s。每一次操作,你可以选择s中两个相邻的字符,并将它们交换。请你返回将s变成回文串的最少操作次数。注意,输入数据会确保s一定能变成一个回文串。输入:s="letelt"。输出:2。答案2023-05-27:大体过程如下:1.定义结......
  • 2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两
    2023-05-27:给你一个只包含小写英文字母的字符串s。每一次操作,你可以选择s中两个相邻的字符,并将它们交换。请你返回将s变成回文串的最少操作次数。注意,输入数据会确保s一定能变成一个回文串。输入:s="letelt"。输出:2。答案2023-05-27:大体过程如下:1.定义结构体Index......
  • 3.无重复字符的最长子串
    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。关键是搞懂什么时候左指针向右移动,右指针向右移动。左指针一直向右移动,左指针只要移动就移除指向的元素右指针移动条件:1.没越界2.指向元素不在Set里面右指针移动的时候时刻记录Set长度classSolution......
  • 回文
    [CSP-S2021]回文首先考虑爆搜。我们可以先确定\(b\)的第一个位置和最后一个位置,然后将数列放入两个队列中。4124531235这是样例,首先最优的情况当然是第一个位置和最后一个位置都取L,即\(4\)。两个队列分别是\(q1=[1,2]\)和\(q2=[5,3,1,2,3,5]\)。然后从两......
  • 回文数
    #include<stdio.h>intmain(){ inti=0;j=0;a[5],b[5],k=0,count=0,n=0; for(i=1;i<256;i++) { n=i*i; for(j=0,k=0;n!=0;j++,k++) { a[j]=n%10; n/=10; } for(j=0;j<k;j++) { b[j]=a[k-1-j]; } for(j=0,count=0;j<k;j++) { if(a[j]==b[j]) ......
  • 导出Excel,下载文件,返回文件流和报错信息处理
    downloadExcelCreateA(resData,fileName){//下载文件varblob=newBlob([resData],{type:'application/vnd.ms-excel'})vardownloadElement=document.createElement('a');varhref=window.URL.creat......
  • 最长单调递增子序列
    问题:设计一个O(n^2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。方法一:最长公共子序列,动态规划。思路:1:将数组a复制到b;      2:对b排序;      3:对数组b去重(注意去重是必要的,因为要求单调递增),这里利用hash表去重。        4:求a,b数组......
  • [USACO1.2]回文平方数 Palindromic Squares
    #[USACO1.2]回文平方数PalindromicSquares##题目描述回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。给定一个用十进制表示的正整数B,输出所有[1,300]中,它的平方用B进制表示时是回文数的数。##输入格式共一行,一个单独的正整数B。##......
  • 力扣第409:最长回文串
    力扣第409:最长回文串回文串,正倒着读是一样的代码抄录自>我不想当菜鸟点击查看java代码```classSolution{publicintlongestPalindrome(Strings){int[]letter=newint[128];char[]cs=s.toCharArray();for(charc:cs){......