Q:
字符串查找(又称查找子字符串),是字符串操作中一个很有用的函数。你的任务是实现这个函数。
对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。
如果不存在,则返回 -1。
如果 source = “source” 和 target = “target”,返回 -1。
如果 source = “abcdabcdefg” 和 target = “bcd”,返回 1。
A:
之前写过的,这里就用BF算法。
这个题目有一点点不同就是返回位置。
BF-算法
KMP-算法
class Solution {
public:
/**
* Returns a index to the first occurrence of target in source,
* or -1 if target is not part of source.
* @param source string to be scanned.
* @param target string containing the sequence of characters to match.
*/
int strStr(const char *source, const char *target) {
const static int MISMATCH = -1;
if (!source || !target) {
return MISMATCH;
}
if (!*target) {
return 0; //空字符串匹配任何字符串
}
//不使用strlen检查长度,strlen也是要遍历的
const char *s = source;
const char *s1;
const char *s2;
while (*s) {
s1 = s;
s2 = target;
while (*s1 && *s2 && !(*s1-*s2))
s1++, s2++;
if (!*s2) {
return s - source;
}
s++;
}
return MISMATCH;
}
};