微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在抛出'std::length_error'

如何解决在抛出'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

解决方法

您的代码中有两个问题。

  1. 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

  2. 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 举报,一经查实,本站将立刻删除。