当前位置: 首页 > 知识库问答 >
问题:

最长回文子串

伊俊能
2023-03-14

我正试图从leet代码中解决一个问题。我为此写了一个方法。这在local Eclipse中工作得很好,但是当我在leetcode上提交这个解决方案时,它说超过了时间限制。

有人能给我一些建议吗?我可以在下面的代码中修改一些东西,以使它更快地工作?我也可以在这个帖子中输入字符串。

public String longestPalindrome(String s) {
   if(s.equals("")) return "";
   if(s.length()==1) return s;
   if(s.length()==2) {
       if(s.charAt(0) == s.charAt(1))
           return s;      
   }

   char[] ch = s.toCharArray();
   Set<Integer> set = new HashSet<Integer>();
   int maxP=0;String maxPalin="";

   for(int i =2;i < s.length();i++){
       if((ch[i-1]==ch[i] || ch[i-2] == ch[i]) && !set.contains(i) ){
           int loop;
           if(ch[i-1]==ch[i]){
               loop=i-1;
           }
           else{
               loop=i-2;
           }

           for(int k =i,l=loop; l>=0 && k<s.length();k++,l--){
               if(ch[k]!= ch[l]){
                   if(maxP < s.substring(l+1, k).length())
                   maxPalin=s.substring(l+1, k);
                   maxP=s.substring(l+1, k).length();
                   set.add(i);
                   i=2;
                   break;
               }
               if(l==0){
                   if(maxP < s.substring(0, k+1).length())
                       maxPalin=s.substring(0, k+1);
                       maxP=s.substring(0, k+1).length();
                       set.add(i);
                       i=2;
                       break;
               }
               if(k== s.length()-1){
                   if(maxP < s.substring(l, s.length()).length())
                   maxPalin=s.substring(l, s.length());
                   maxP=s.substring(l, s.length()).length();
                   set.add(i);
                   i=2;
                   break;
               }
           }
       }
   }

   return maxPalin;
}

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

共有1个答案

钱旻
2023-03-14

遍历字符,对于所有位置,检查下一个字符是否与当前字符相同(例如'f'、'f'),或者后一个字符与前一个字符是否相同(例如'f'、'g'、'f')。如果是这种情况,则向后和向前循环并比较字符,直到找到两个不匹配的字符。将字符串的长度与迄今为止找到的最长长度进行比较,如果更长,则保存它。转到下一个角色。如果找到的回文长度/2大于剩余字符数,也可以退出循环。

 类似资料:
  • 下面的代码给出了最长的回文子序列长度。如何修改代码以获得最长的回文子串长度? 下面是一个示例调用:

  • 以下是我尝试过的,但在某些情况下失败了,但我觉得我几乎走上了正确的轨道。

  • 我的最新博客地址:我的最新博客 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 实现如下: /** * @param {string} s * @return {string} */

  • 我正在为自己学习DP,我可以轻松解决最长回文子串的长度,但很难真正打印最长回文子串。我检查了一个视频链接,他展示了一种获得LPS的方法,但我无法让它适用于更长的序列。考虑geeksforgeeks的例子: 现在在我的方法中,我将填充表格的底部三角形,如下所示: 因此,对于上述字符串,我的DP表如下所示: 这是视频中原始矩阵的转置,反过来,我不需要单独处理len 1,2, 所以问题是,为什么我在dp

  • 这就是leetcode问题:给定一个字符串s,在s中找到最长的回文子字符串。您可以假定s的最大长度是1000。我的解决方案是使用一个dp表,其中dp[i][j]=以S[i]开始,以S[j]结束的最长回文子字符串的长度 我想知道为什么我的解决方案的时间限制超过了错误,不应该是O(n^2)吗?

  • 为什么JS代码返回“CBB”而不是“BB”?