复制
收藏
提问
简洁
class Solution { public: int strStr(string haystack, string needle) { int left=0; if(haystack==needle) return 0; for(int i=0;i<haystack.size()-needle.size();i++) { if(haystack.substr(i,needle.size())==needle) { return i; } else return -1; } } };修改代码
0秒前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
你提供的代码中存在一些问题,比如在循环中,如果找到了匹配的字符串,应该立即返回当前索引,而不是继续循环。另外,循环的终止条件也需要调整,因为如果needle
的长度为0,那么应该返回0。
下面是修改后的代码:
class Solution {
public:
int strStr(string haystack, string needle) {
if (needle.empty()) return 0; // 如果needle为空,直接返回0
if (haystack.empty()) return -1; // 如果haystack为空,返回-1
int len1 = haystack.size();
int len2 = needle.size();
for (int i = 0; i <= len1 - len2; ++i) {
if (haystack.substr(i, len2) == needle) {
return i; // 找到匹配的字符串,返回当前索引
}
}
return -1; // 没有找到匹配的字符串,返回-1
}
};
这段代码首先检查needle
是否为空,如果为空,则直接返回0。然后检查haystack
是否为空,如果为空,则返回-1。接下来,使用一个循环来遍历haystack
,每次比较从当前索引开始的len2
长度的子字符串是否与needle
相等。如果相等,则返回当前索引。如果循环结束后都没有找到匹配的字符串,则返回-1。
你觉得结果怎么样?