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

力扣:5. 最长回文子串

时间:2024-05-30 12:58:51浏览次数:16  
标签:子串 示例 int 力扣 boolean dp 回文

5. 最长回文子串

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

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成
class Solution {
    public String longestPalindrome(String s) {
        int n = s.length();
        if (n < 2) {
            return s;
        }
        
        boolean[][] dp = new boolean[n][n];
        int start = 0;
        int maxLen = 1;
        
        // 单字符都是回文串
        for (int i = 0; i < n; i++) {
            dp[i][i] = true;
        }
        
        // 相邻两个相同字符是回文串
        for (int i = 0; i < n - 1; i++) {
            if (s.charAt(i) == s.charAt(i + 1)) {
                dp[i][i + 1] = true;
                start = i;
                maxLen = 2;
            }
        }
        
        // 从长度为3开始找回文串
        for (int len = 3; len <= n; len++) {
            for (int i = 0; i + len - 1 < n; i++) {
                int j = i + len - 1;
                if (s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1]) {
                    dp[i][j] = true;
                    start = i;
                    maxLen = len;
                }
            }
        }
        
        return s.substring(start, start + maxLen);
    }
}

标签:子串,示例,int,力扣,boolean,dp,回文
From: https://blog.csdn.net/icbbm/article/details/139320746

相关文章

  • 5. 最长回文子串
    给你一个字符串s,找到s中最长的回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:-1<=s.length<=1000-s仅由数字和英文字母组成......
  • 力扣-474. 一和零
    1.题目题目地址(474.一和零-力扣(LeetCode))https://leetcode.cn/problems/ones-and-zeroes/题目描述给你一个二进制字符串数组strs和两个整数m和n。请你找出并返回strs的最大子集的长度,该子集中最多有m个0和n个1。如果x的所有元素也是y的元素,集合......
  • P9 【力扣+知识点】【算法】【二分查找】C++版
    【704】二分查找(模板题)看到复杂度logN,得想到二分给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在......
  • 3.无重复字符的最长子串
    给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度为1。示例3:输......
  • 力扣-416. 分割等和子集
    1.题目题目地址(416.分割等和子集-力扣(LeetCode))https://leetcode.cn/problems/partition-equal-subset-sum/题目描述给你一个只包含正整数的非空数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例1:输入:nums=[1,5,11,5]......
  • 打卡信奥刷题(22)用Scratch图形化工具信奥P1015 [NOIP1999 普及组] 回文数,写了一个好用
    P1015[NOIP1999普及组]回文数,用Scratch实现计算回文数,还写了一个比较好用的反序积木题目[NOIP1999普及组]回文数题目描述若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。例如:给定一个十进制数......
  • 力扣算法之1050. 合作过至少三次的演员和导演
    题解actor_id和director_id,类似一个坐标,只要出现三次或者三次以上就打印出来我的解SELECTactor_id,director_idFROMActorDirectorGROUPBYactor_id,director_idHAVINGCOUNT(1)>=3我的解注解同时分组,两个出现次数大于等于3的就是符合的,看了下,其他的思路和这个......
  • 力扣:2028. 找出缺失的观测数据
    2028.找出缺失的观测数据现有一份 n+m 次投掷单个 六面 骰子的观测数据,骰子的每个面从 1 到 6 编号。观测数据中缺失了 n 份,你手上只拿到剩余 m 次投掷的数据。幸好你有之前计算过的这 n+m 次投掷数据的 平均值 。给你一个长度为 m 的整数数组 rolls......
  • 力扣刷题记录: 2134. 最少交换次数来组合所有的 1 Ⅱ
        这道题是第275场周赛的Q2,LC竞赛分为1748,主要考察滑动窗口。说实话这道题要想到是滑动窗口就很简单,否则就根本无从下手。方法一.滑动窗口(时间超过62.53%C++用户)        处理环形数组的一个很有效的技巧就是“追加”,把整个nums数组追加到nums数组后面,......
  • 问题 I: 判断回文
    判断回文(福州师大附中信息网站)题目描述输入一串字符,字符个数不超过100,且以.结束,判断它们是否构成回文。输入一串字符,以.表示结束。输出输出判断的结果,以yes或者no表示。样例输入<spanstyle="color:#333333"><spanstyle="background-color:#f5f5f5">abccba.df<......