题目描述
实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从0 开始)。如果不存在,则返回 -1 。说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf()定义相符。示例 1:
输入:haystack = “hello”, needle = “ll”
输出:2示例 2:
输入:haystack = “aaaaa”, needle = “bba”
输出:-1示例 3:
输入:haystack = “”, needle = “”
输出:0提示:
0 <= haystack.length, needle.length <= 5 * 10^4
haystack 和 needle仅由小写英文字符组成
class Solution
{
public:
//暴力破解思路:让字符串needle与字符串haystack的所有长度为needle.size()的字串进行匹配
int strStr(string haystack, string needle)
{
//求得字符串haystack和needle的长度
int len_h = haystack.size(), len_n = needle.size();
for (int i = 0; i <= len_h - len_n; i++)
{
//定义初始标志flag为true
bool flag = true;
for (int j = 0; j < len_n; j++)
{
//为了减少不必要的匹配,每次匹配失败即立刻停止当前子串的匹配
if (haystack[i + j] != needle[j])
{
flag = false;
break;
}
}
//当前子串匹配成功,返回当前子串的开始位置
if (flag)
{
return i;
}
}
//所有子串均匹配失败,返回-1
return -1;
}
};