我试图解决以下问题: 给定一个字符串,找到最长子字符串的长度而不重复字符。
示例:
鉴于“abcabcbb”,答案为“abc”,长度为3。
鉴于“bbbbb”,答案为“b”,长度为1。
鉴于“pwwkew”,答案为“wke”,长度为3.请注意,答案必须是子字符串,“pwke”是子序列而不是子字符串。
我基本上创建了两个附加功能。
无法检查x是否在字符串s
输出字符串数组中最大字符串的最长时间。
我似乎无法在代码中发现任何错误。
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;
}
};
答案 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中。导致函数不返回最长的字符串。 希望它有所帮助