当我尝试从leetcode解决问题Longest Palindromic Substring时,发生了一些奇怪的事情,我无法理解问题所在。这是我写的源代码,还有奇怪的输出。

#include <iostream>
#include <string>

class Solution {

public:

    std::string longestPalindrome(std::string s) {

        // incase s is empty
        if (s.size() <  1) return "";

        int start = 0, end = 0;
        for (std::string::size_type i = 0; i < s.size(); i++) {

            int len1 = expandAroundCenter(s, i, i);
            int len2 = expandAroundCenter(s, i, i+1);
            int len  = std::max(len1, len2);

            if (len > (end - start + 1)) {
                start = i - (len-1)/2;
                end   = i + (len)  /2;
            }
        }

        std::cout << std::endl;
        std::cout << "start: " << start << ", end: " << end << std::endl;
        return s.substr(start, end+1);

    }

private:

    int expandAroundCenter(std::string s, int left, int right)
    {
        while (left >= 0 && right < s.size() && s[left] == s[right])
        {
            left--;
            right++;
        }

        return right-left-1;
    }
};

int main(void)
{
    std::string s1 = "ababd";
    std::string s2 = "addbbcc";
    std::string s3 = "bb";
    Solution sol;
    std::cout << sol.longestPalindrome(s1) << std::endl;
    std::cout << sol.longestPalindrome(s2) << std::endl;
    std::cout << sol.longestPalindrome(s3) << std::endl;
    std::cout << std::endl;
    return 0;
}


输出如下

c&#43;&#43; - C&#43;&#43;中字符串的子字符串与索引不一致-LMLPHP

这很奇怪,为什么子字符串的长度与索引的范围不一致。

最佳答案

我建议在调试器中运行代码,并在开始和结束时设置监视。很有可能,这与您认为的方式不符。

回顾string :: substr()的定义

string substr (size_t pos = 0, size_t len = npos) const;

'pos' = start position of the substring
'len' = Number of characters to include in the substring


在我看来,您可能会认为string :: substr()通过指定开始和结束位置而起作用,但事实并非如此。

我希望这有帮助。如果我对string :: substr()的假设不正确,请执行以下操作:


像我建议的那样安装调试器。
尝试进行更复杂的测试,以更深入地了解问题。


注意:将来,请尝试更好地记录代码,特别是如果您要在在线论坛上发布有关帮助/解决方案的信息时。

关于c++ - C++中字符串的子字符串与索引不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51664564/

10-11 23:07
查看更多