gpt4 book ai didi

c++ - C++ 中字符串的子串与索引不一致

转载 作者:行者123 更新时间:2023-11-28 04:35:10 24 4
gpt4 key购买 nike

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

#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;
}

输出如下

output

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

最佳答案

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

记忆一下 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() 的假设不正确,请执行以下操作:

  1. 按照我的建议设置调试器。
  2. 尝试更复杂的测试以更深入地了解问题。

注意:将来,请尝试更好地记录您的代码,尤其是当您要在在线论坛上发帖寻求帮助/解决方案时。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com