描述
对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1
。
说明
在面试中我是否需要实现KMP算法?
- 不需要,当这种问题出现在面试中时,面试官很可能只是想要测试一下你的基础应用能力。当然你需要先跟面试官确认清楚要怎么实现这个题。
样例
如果 source = "source"
和 target = "target"
,返回 -1
。
如果 source = "abcdabcdefg"
和 target = "bcd"
,返回 1
。
思路:
这是一个不断比较子集的过程,两字符串相等,其长度必定相等。
从source中遍历target长度的子集substr,然后比较substr与target,相等则返回第一个相同子集出现的位置,否则返回-1;代码及注释如下:
int compare_kk::strStr(string &source, string &target)
{
int len_source = source.length();
int len_target = target.length();
int flag;
if(len_source < len_target)
return -1;
if(!source.empty() && !target.empty())
{
for(int i=0; i<=len_source-len_target; i++)
{
string substr = source.substr(i, len_target); //得到与target长度相同的子串
//cout << substr << endl;
if(substr.compare(target) == 0)
{
flag = i;
return flag; //如果出现第一次,即刻返回flag值
}
else
flag = -1; //否则将flag置为-1,直到循环结束
}
}
return flag;
}