【发布时间】:2020-10-17 01:02:00
【问题描述】:
我目前正在做一个 leetcode 问题,我必须在句子中找到前缀并返回句子中的单词编号,否则返回 -1。我想出了一个解决方案,但它会因一些字符串而崩溃,我不知道为什么。一个例子如下:
输入: sentence = "我喜欢吃汉堡",searchWord = "burg"
输出: 4(我也得到 4 的输出)
解释:“burg”是“burger”的前缀,是句子中的第4个单词。
但是这个例子失败了:
输入: sentence = "this question is an easy question", searchWord = "pro"
输出: 2(我得到的输出为 6)解释:“pro”是“problem”的前缀,是句子中的第2个和第6个词,但我们返回2,因为它是最小索引。
我的cout为此产生了一个非常奇怪的sn-p:
problem is an easy problem
problem is an easy problem
problem is an easy problem
problem is an easy problem
probl
proble
problem
problem
problem i
problem is
当 i 递增时,它完全忽略了前几个子字符串,这是唯一一次发生。
int isPrefixOfWord(string sentence, string searchWord)
{
string sub;
int count = 1;
for (int i = 0; i < sentence.length(); i++)
{
if (sentence[i] == ' ')
count++;
for (int j = i; j < sentence.length(); j++)
{
sub = sentence.substr(i, j);
cout<<sub<<endl;
if (sub == searchWord)
{
return count;
}
}
}
return -1;
}
有什么想法吗?
int isPrefixOfWord(string sentence, string searchWord)
{
string sub;
int count = 1;
for (int i = 0; i < sentence.length() - searchWord.length() - 1; i++)
{
if (sentence[i] == ' ')
count++;
sub = sentence.substr(i,searchWord.length());
if ( sub == searchWord && (sentence[i-1] == ' ' || i == 0))
{
return count;
}
}
return -1;
}
【问题讨论】:
-
您错误地使用了
substr。您也应该将程序的输出添加到您的问题中。 -
这是来自
i的长度。你没有检查那个。 -
您的程序中有
cout<<sub<<endl;。为什么不显示? -
嗯,骗子错了。您实际上应该更改循环。
-
您正在使用
sub来查看它是否是您要搜索的单词。您的输出显示了许多您不应该考虑的字符串。