【问题标题】:Finding the longest palindromic substring (suboptimally)找到最长的回文子串(次优)
【发布时间】:2021-09-22 20:51:39
【问题描述】:

我正在做一个编码练习,要求我在给定输入字符串时找到最长的回文子串。我知道我的解决方案在效率方面不是最佳的,但我正在尝试首先获得正确的解决方案。

到目前为止,这是我所拥有的:

#include <string>
#include <algorithm>
#include <iostream>

class Solution {
public:
    string longestPalindrome(string s) {
        string currentLongest = "";
        
        for (int i = 0; i < s.length(); i++)
        {
            for (int j = i; j <= s.length(); j++)
            {
                string testcase = s.substr(i, j);
                string reversestring = testcase;
                std::reverse(reversestring.begin(), reversestring.end());
                if (testcase == reversestring)
                {
                    if (testcase.length() > currentLongest.length())
                    {
                        currentLongest = testcase;
                    }
                }
            }
        }
        
        
        return currentLongest;
    }
};

它适用于几个测试用例,但也适用于许多其他测试用例。我怀疑在我的代码的最内部循环中出现了问题,但不确定到底是什么。我正在尝试生成所有可能的子字符串,然后通过将它们与它们的反向进行比较来检查它们是否是回文;在我确定它们是回文后,我检查它是否比我发现的当前最长的回文更长。

【问题讨论】:

  • 但我想先找到一个正确的解决方案。一个合理的计划。
  • 听起来您可能需要学习如何使用调试器来单步调试您的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programsDebugging Guide

标签: c++ substring palindrome


【解决方案1】:

因为你没有尝试所有可能的解决方案

在c++中,substr有两个参数,第一个是起始索引,第二个是子串的长度

在你的程序中,你不会检查从索引 4 开始并且长度为 3 的字符串,例如

在第二个 for 循环中,您应该从索引 1 开始,而不是从索引 i 开始

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2015-01-02
    • 2018-08-28
    相关资源
    最近更新 更多