【发布时间】:2021-05-20 07:23:24
【问题描述】:
我收到上述错误,我无法调试它的原因。谁能帮我解决这个问题(是什么导致了这个错误)?
问题陈述:寻找最长的公共前缀
来源:https://leetcode.com/problems/longest-common-prefix/
代码(使用分而治之):
#include <iostream>
#include <unordered_map>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
string common_prefix(string left, string right){
int minim = min(left.length(), right.length());
for (int i=0; i<minim; i++){
if (left[i]!=right[i]){
return left.substr(0, i);
}
}
return "" ;
}
string dap(vector<string>& a, int l, int r){
if (l==r) return a[l];
int mid = (l+r)/2;
string left = dap(a, l, mid);
string right = dap(a, mid+1, r);
return common_prefix(left, right);
}
string longestCommonPrefix(vector<string>& strs) {
return dap(strs, 0, strs.size());
}
};
int main()
{
Solution s;
vector<string> st{"flower","flow","flight"};
string ans = s.longestCommonPrefix(st);
cout << ans;
}
追溯:
Runtime Error
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_M_create
输入:
["flower","flow","flight"]
预期输出:
"fl"
【问题讨论】:
-
请提供minimal reproducible example,包括输入、预期输出以及代码应该做什么
-
不知何故我期待着这个回复。 Leet 代码在内部提供了一个
main()来创建class Solution的实例并以某种方式调用它(使用某个函数)。只需添加此代码并在本地调试您的应用程序,直到您发现发生了什么。这是非常常见的方式... (What is a debugger and how can it help me diagnose problems?) -
当
l和r是 3 的 3 项输入向量时,您可以在if (l==r) return a[l];中访问越界。在调用dap的序列中,有一个调用dap(3,3).. -
@Pygirl 我无法调试它的原因 -- 你为什么无法调试代码?获取真正的 C++ 编译器,在本地编译代码,添加带有数据的
main()。 -
在 Linux 上(如果启用),中止的应用程序将产生所谓的核心转储。使用
gdb,可以加载应用程序和核心转储以查看调用堆栈,就像调用abort()之前一样。因此,不需要在调试器中进行新的运行。但是,如果这是一个可重现的错误,那么只需在调试器中重新运行应用程序也可以正常工作。