●28. 实现 strStr()
思路是"sadbutsad"找"sad"
然后可能存在"sadbutsad"找"sadr"这样就是不匹配返回-1,否则返回的就是地址。
匹配过程中可能出现
完全不匹配
匹配好几次
匹配了但是不完全匹配的情况
先看是否匹配,不匹配返回-1,匹配是否完全,不完全返回-1;
【垃圾代码,无法运行】找问题。
我的思路太麻烦了,直接循环,不一样的就是false,如意最后如果是true就是正确答案
class Solution {
public:
int strStr(string haystack, string needle) {
int n = haystack.size(), m = needle.size();
for (int i = 0; i + m <= n; i++) {
bool flag = true;
for (int j = 0; j < m; j++) {
if (haystack[i + j] != needle[j]) {
flag = false;
break;
}
}
if (flag) {
return i;
}
}
return -1;
}
};
修改
class Solution {
public:
int strStr(string haystack, string needle) {
int h=haystack.size();//"hello"h=5
int n=needle.size(); //"ll"n=2
int i, j;
for(i=0;i+n<=h;i++)//注意这个等号比如在a中查询a
{
bool flag =true;
for(j=0;j<n;j++)
{
if(haystack[i+j]!=needle[j])//这里是i+j是从0开始数
{flag=false;
break;//跳出当前循环
}
}
if(flag)
return i;//不太懂这个i是怎么返回的 回答:是因为只要出啊先不一样的就会变为flase,所以循环后直接输出i就行,其实i存储的就是每一个能够与字符串匹配的首位。
}
return -1;
}
};