5. Longest Palindromic Substring

2023-05-16

5. Longest Palindromic Substring

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example 1:

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.

Example 2:

Input: "cbbd"
Output: "bb"

ps:这里是求substring ,而不是subsequence

solution1:Time Limit Exceeded

其实这也是一个动态规划的问题,对于每个子问题都会进行深度优先搜索,时间复杂度太大,没有ac?

public String longestPalindrome(String s) {
        int start = 0;
        int end = 0;
        int longestLen = 0;
        if(s == null || s.length() < 2) return s;


        int len = s.length();
        for(int j = 1; j <= len - 1; j++){
            for(int i = 0; i < j; i++){
                if(isPalindrome(s.substring(i,j+1))){
                    if(j - i + 1 > longestLen){
                        longestLen = j - i +1;
                        start = i;
                        end = j;
                    }
                }

            }
        }
        return s.substring(start,end+1);

    }

    public boolean isPalindrome(String s){
        int start = 0;
        int end = s.length() - 1;
        if(s.length() == 1 ) return true;

        if(s.charAt(start) == s.charAt(end) ){
            if(end - start <= 2)
                return true;
            return isPalindrome(s.substring(start+1,end));
        }else {
            if(end - start == 1)
                return false;
        }

        return false;

    }
  • s.length() not s.length
  • s.substring(start,end):start is inclusive, end is exclusive

solution2动态规划的改进版——构建辅助数组

在这里插入图片描述
每求解一个字串是否为palindrome时就记录下来,下次需要使用的时候可以直接拿来用,而不是又重新求解

class Solution {
    public String longestPalindrome(String s) {
        if(s == null || s.length() < 2) return s;

        int len = s.length();

        boolean[][] isPalindrome = new boolean[len][len];

        int maxLen = 0;
        int left = 0;
        int right = 0;

        //先初始化对角线的值
        for(int i = 0; i < len; i++){
            isPalindrome[i][i] = true;
        }

        //这里从右下角而不是左下角开始,因为这样才是自底向上的
        for(int start = len - 2; start >= 0; start--){
            for(int end = start + 1; end < len; end++){
               if(s.charAt(start) == s.charAt(end)){
                    if(end - start == 1)
                        isPalindrome[start][end] = true;
                    else
                        isPalindrome[start][end] =  isPalindrome[start+1][end-1];
                    
                }
                if(isPalindrome[start][end]){
                    if( end - start + 1 > maxLen){
                        maxLen = end - start + 1;
                        left = start;
                        right = end;
                    }


                }
            }
        }


        return s.substring(left,right+1);
    }

}

参考
https://www.youtube.com/watch?v=0xeBqanD5GQ

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5. Longest Palindromic Substring 的相关文章

  • 最长的数字循环周期

    我试图找到小于 1000 的数字 该数字除以 1 时会产生最长的重复数字串 我有一个十进制数字列表 必须找到具有最长重复序列的数字 这是我到目前为止所拥有的 numbers 2 999 decimal representations num
  • 最长最大重复子串

    子串的长度可以是 1 2 3 我试图解决的问题涉及找到出现次数最多的子字符串 所以它基本上分解为寻找具有最大频率的字符 然而 我发现我可以使用后缀树在 O n 中找到最长的重复子串 但是 后缀树返回子字符串 并优先考虑长度 我想找到出现次数
  • Python:字符串列表中子字符串的最佳搜索

    我有一个特殊的问题 我想在许多字符串列表中搜索许多子字符串 以下是我想做的事情的要点 listStrings ACDE CDDE BPLL listSubstrings ACD BPI KLJ 上述条目只是示例 len listString
  • 子串算法

    有人可以向我解释如何迭代解决子串问题吗 The problem given two strings S S1S2S3 Sn and T T1T2T3 Tm with m is less than or equal to n determin
  • 如何在Python中使用正则表达式排除特定字符串?

    我想匹配如下字符串 45 meters 45 meters 45 45 但不是像这样的字符串 45 meters you 45 you 45 and you 在这两种情况下 问号都必须位于末尾 所以 本质上我想排除所有包含 you 这个词的
  • C 中的字符串分割器 - 它是如何工作的?

    我继承了一个庞大的代码库 并且有一个实用函数可以分割字符串 字符 我了解大约 80 的运作方式 但我不明白 token 0 line 任何指点都将受到高度赞赏 include
  • Swift - 查找字符串中两个位置之间的子字符串

    我有一个格式如下的字符串 XbfdASF FBACasc Piida bfedsSA XbbnSF vsdfAs 基本上它是一个 ID ID 然后又重复 我有第一个 ID 我需要找到它的合作伙伴示例 我有 Piida 我需要找到 之后紧随其
  • 如何在 Postgresql 中提取子字符串模式

    我有一列包含很多不一致的字符串 其中一些包含具有一致模式的子字符串 2015mmdd AB CD EFG text text HIJ 我想提取它 我觉得这是正则表达式和子字符串命令的交叉情况 到目前为止我最好的方法是相当丑陋的 substr
  • 在 MySQL 条件中使用子字符串

    我正在尝试获取一个人名字的第一个字母等于的所有实例P 这是我想出的 它不会返回任何内容 sql SELECT FROM people WHERE SUBSTRING FirstName 0 1 P 建议 您的表达式不起作用的原因是 subs
  • 从Python中的一行中提取特定的子字符串

    我有一个包含多行格式的文件 格式如下 DIV ID 0X78800009 EXT LOS ANGELES TY STANDARD OWN 0X74400002 ABBR LA 我需要提取 EXT 值 但只提取引号中的部分 我目前正在使用这个
  • Objective-C 中如何检查一个字符串是否包含另一个字符串?

    如何检查字符串 NSString 包含另一个较小的字符串 我希望有这样的事情 NSString string hello bla bla NSLog d string containsSubstring hello 但我能找到的最接近的是
  • 如何使用 javascript 在 getSelection() 中查找所选文本的索引?

    我正在尝试将样式应用于用户选择的文本 鼠标拖动 为此我需要获取所选文本的开始和结束索引 我尝试过使用 indexOf 方法 但它返回所选子字符串的第一次出现 我想要子字符串相对于原始字符串的实际位置 例如 如果我选择位置 3 处的字母 O
  • 在 R 中查找特殊字符的第三次出现并删除之前的所有内容

    我有这个包含 URL 的示例向量 我的目标是获取URL的路径 sample1 lt c http tercihblog com indirisu docugard http funerariagomez com js ggogle a201
  • 在 Windows 上使用 CMD 从文件目录中删除特定子字符串

    我经常使用免费的在线无损文件压缩器来节省磁盘空间 并使传输和推送存储库变得更容易 我对压缩器的主要问题是它在每个文件名的末尾附加 min 由于种种原因 想通过覆盖的方式来替换原来的文件 而不是删除旧文件并保留新文件 使用 新 名称 对于我的
  • pyspark子串和聚合

    我是 Spark 新手 我有一个包含此类数据的 csv 文件 date accidents injured 2015 20 03 18 00 15 5 2015 20 03 18 30 25 4 2015 20 03 21 10 14 7
  • 如何从字符串中提取数字?

    我有包含路径的字符串 string toto titi 12 tata 2 abc def 我只想从该字符串中提取数字 要提取第一个数字 tmp string toto titi num1 tmp tata 要提取第二个数字 tmp str
  • 如何在 Ruby 中获取从位置 N 到最后一个字符的子字符串?

    我想从字符串中获取从位置 N 到字符串末尾的子字符串 在 Ruby 中如何做到这一点 只需将字符串切片即可 string N 1
  • 识别推文消息中正确的主题标签索引

    我需要识别 Twitter 消息 各种语言 表情符号等 中的正确索引 我找不到返回这些位置的解决方案 如下例所示 import regexp testing github com stretchr testify require func
  • Linq 在 .Substring() 上抛出异常

    我遇到了一种情况 我需要让 LINQ to Entities 查询根据字符串的长度返回一个子字符串 这是查询 var query from f in Context Files orderby f DateAdded descending
  • 查找 NSString 中子字符串的所有位置(不仅仅是第一个)

    有一个子串在字符串中出现多次 我用rangeOfString 不过好像只能找到第一个位置 如何找到子字符串的所有位置 NSString subString1 NSString subString2 n NSRange range1 newr

随机推荐

  • 研一(研究生)看论文文献必须要知道的几个网站

    找论文看文献必备的几个网站 明确研究方向查找论文看英文文献看文献方法想说的几句话 明确研究方向 刚进入研究生阶段的同学们都干劲十足 xff0c 充满无限期待 但是没有正确的方向很容易让你的努力白费 xff0c xff08 有人会说丰富了自己
  • 【网络教程】群晖自动更新 Docker 映像与容器(Watchtower)【转】

    群晖自动更新 Docker 映像与容器 xff08 Watchtower xff09 更多内容
  • git多账号配置

    什么叫多账号配置 xff0c 也就是说假如你在公司用的gitlab服务器 xff0c 但是自己还有用到GitHub xff0c 那么此时你在本地就需要配置多个ssh key 步骤如下 xff1a 利用ssh keygen t rsa f g
  • Ubuntu 18.04和windows建立共享文件夹

    1 安装samba sudo apt install samba sudo apt install cifs utils 2 创建共享目录 mkdir home yourname share yourname是home下一个文件夹 xff0
  • Linux权限详解,多用户多组各种权限配置原理

    网上有太多关于Linux权限详解 xff0c 这里不啰嗦那些 主要解释下这些权限是杂用的 xff0c 否则知道了什么用户 组之类的权限也配不好 一 权限分类 r xff1a 读取权限 xff0c 数字代号为 34 4 34 w xff1a
  • 1.tow sum

    文章目录 题目c 43 43 版本java版本利用hashmap正确做法 题目 Two Sum Easy Given an array of integers return indices of the two numbers such t
  • 2. Add Two Numbers

    2 Add Two Numbers Medium 59971568Share You are given two non empty linked lists representing two non negative integers T
  • Linux VNC server的安装及简单配置使用

    Linux VNC server的安装及简单配置使用 转 xff1a http www 2cto com os 201309 241104 html Linux VNC server的安装及简单配置使用 摘要 xff1a Linux vnc
  • 3. Longest Substring Without Repeating Characters

    Longest Substring Without Repeating Characters Given a string find the length of the longest substring without repeating
  • 4. Median of Two Sorted Arrays

    Median of Two Sorted Arrays Hard There are two sorted arrays nums1 and nums2 of size m and n respectively Find the media
  • 7. Reverse Integer

    文章目录 Reverse IntegersolutionAlgorithm Reverse Integer Easy Given a 32 bit signed integer reverse digits of an integer Ex
  • 8. String to Integer (atoi)

    String to Integer atoi Implement atoi which converts a string to an integer The function first discards as many whitespa
  • 9. Palindrome Number

    Palindrome Number Easy Determine whether an integer is a palindrome An integer is a palindrome when it reads the same ba
  • 1071. Greatest Common Divisor of Strings

    1071 Greatest Common Divisor of Strings Easy 30985Share For strings S and T we say 34 T divides S 34 if and only if S 61
  • 这个问题搞了我一天

  • 150逆波兰式

    文章目录 150 Evaluate Reverse Polish NotationSolution 150 Evaluate Reverse Polish Notation Medium Evaluate the value of an a
  • 收到礼物最大值

    题目描述 在一个m n的棋盘的每一个格都放有一个礼物 xff0c 每个礼物都有一定价值 xff08 大于0 xff09 从左上角开始拿礼物 xff0c 每次向右或向下移动一格 xff0c 直到右下角结束 给定一个棋盘 xff0c 求拿到礼物
  • 64. Minimum Path Sum

    64 Minimum Path Sum Given a m x n grid filled with non negative numbers find a path from top left to bottom right which
  • 找出亲密对数

    题目内容 xff1a 求数n之内的亲密对数 所谓 亲密对数 xff0c 即A的所有因子 xff08 包含1但不包含其本身 xff09 之和等于B xff0c 而B的所有因子之和等于A 输入格式 某个数字n 输出格式 xff1a 此数字n之内
  • 5. Longest Palindromic Substring

    5 Longest Palindromic Substring Given a string s find the longest palindromic substring in s You may assume that the max