前言
- 文章作为日记或心得,记录学习过程
- 本文记录本题(源自LeetCode)遇到的所有问题、疑惑
- 如对内容有任何建议或看法,欢迎评论区学习交流
正文
题目
解答
思路比较常规,暴力解法
- 嵌套循环,从第一个位置起对于haystack挨个遍历
- 对needle遍历
- 如果不相等,则继续大循环
- 如果相等,则继续小循环
- 如果发现小循环结束结束了,则说明该i位置为答案
- 循环结束后仍未发现,返回-1
class Solution {
public:
int strStr(string haystack, string needle) {
if (needle == "")//按题目要求,如果needle为空则返回0
return 0;
if (needle.size() > haystack.size())//第一次提交时未考虑这种情况
return -1;
for (size_t i = 0; i < haystack.size()-needle.size()+1; i++)
{
for (size_t j = 0; j < needle.size();j++)
{
if (haystack[i + j] != needle[j])//如果不等,则退出小循环继续大循环
break;
else//如果相等,看看是否循环结束了,结束则返回i,未结束就继续
{
if (j == needle.size() - 1)
return i;
continue;
}
}
}
return -1;
}
};
结果
朴素的模式匹配算法
《大话数据结构》中的方法后续补充学习
学习
之前在看《大话数据结构》时看到过类似的问题,有种解法叫做KMP,但是有点复杂,暂时做不到