如何解决在抛出'std::length_error'
我收到上述错误,我无法调试其原因。任何人都可以帮我解决这个问题(是什么导致了这个错误)?
问题陈述:寻找最长公共前缀
来源: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,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","flight"]
预期输出:
"fl"
链接:https://ide.geeksforgeeks.org/9nKPmtFPd5
解决方法
您的代码中有两个问题。
-
home_button = Button(menu_frame,style="Menu.TButton",text="Home") home_button.grid(column=0,row=1)
的初始值是r
,经过几次递归后,您到达strs.size()
行,if (l == r) return a[l];
仍为初始值。r
导致未定义的行为。a[a.size()]
的初始值应为r
。 -
在
strs.size() - 1
中,如果整个较短的字符串是较长字符串的前缀,则返回一个空字符串。您应该返回common_prefix
。
为了提高效率,您应该在函数参数中使用 left.substr(0,minim)
而不是 const string& left
以避免复制字符串。您也可以使用 std::string_view
来完全避免复制字符串:
string left
,
std::length_error
表示您正在尝试创建一个长度超过 std::string::max_size()
因此您需要跟踪抛出的字符串 via。 try/catch
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。