我的C ++代码显示运行时错误,没有输出

时间:2018-04-15 04:46:15

标签: c++

我试图解决以下问题: 给定一个字符串,找到最长子字符串的长度而不重复字符。

示例:

  • 鉴于“abcabcbb”,答案为“abc”,长度为3。

  • 鉴于“bbbbb”,答案为“b”,长度为1。

  • 鉴于“pwwkew”,答案为“wke”,长度为3.请注意,答案必须是子字符串,“pwke”是子序列而不是子字符串。

我基本上创建了两个附加功能。

  1. 无法检查x是否在字符串s

  2. 输出字符串数组中最大字符串的最长时间。

  3. 我似乎无法在代码中发现任何错误。

    class Solution
    {
    public:
    
        int lengthOfLongestSubstring(string s)
        {
            string x;
            int i;
            vector <string> t;
            x = s[0];
            for(i = 1; i < s.length(); i++)
            {
    
                if(notin(x, s[i]))
                {
                    x = +(s[i]);
                }
                else
                {
                    t.push_back(x);
                }
            }
            s = longest(t);
            i = s.length();
    
            return i;
        }
        bool notin(string s, char x)
        {
    
            for(int i = 0; i < s.length(); i++)
            {
                if(s[i] == x)
                {
    
                    return false;
                }
    
            }
            return true;
        }
        string longest(vector <string> t)
        {
            string g;
            g = t[0];
            for(int i = 0; i < t.size(); i++)
            {
    
                if(t[i + 1].length() > t[i].length())
                {
                    g = t[i + 1];
    
                }
            }
            return g;
        }
    };
    

2 个答案:

答案 0 :(得分:0)

问题在于你的最长()函数。

for(int i = 0; i < t.size(); i++)
{
    if(t[i + 1].length() > t[i].length())
    {
        g = t[i + 1];
    }
}

如果i == t.size() - 1,则访问t[i + 1]会产生细分错误。

此外,我认为你的意思是这样做:

if (t[i].length() > g.length())
    g = t[i];

答案 1 :(得分:0)

在函数longest()中,使用带有大小的向量t,比如n。然后你运行从0到n-1的循环。但问题是当你使用t [i + 1]时。在最后一次迭代中,它评估为t [n],这是非法的。因为向量包含从0到n-1的元素,对吗?

您可以通过将循环更改为

来纠正它
for(int i = 1; i < t.size(); i++)
    {

        if(t[i].length() > g.length())
        {
            g = t[i + 1];

        }

另外,你可以看到我改变了if条件。你的病情有问题。 考虑向量{“abcd”,“ab”,“abc”}。在第一次迭代中,“abcd”将存储在g中。但是在随后的迭代期间,由于长度(“abc”)>长度(“ab”),“abc”将存储在g中。导致函数不返回最长的字符串。 希望它有所帮助