每日一道算法题(九)
题目来源:28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)
给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle
不是 haystack
的一部分,则返回 -1
。
整体思路很简单:先看第一个字母匹配是否匹配,再逐个检查
遇到的问题是:
①逻辑要求判断完全匹配此返回第一个标号,开始使用的continue,是继续执行此循环的下一次,错误,加入一个判断bool作为判断条件
②越界错误:最外层循环不能设置为i<n,因为如果m不为1的话,必定最后一位比较会越界;而条件设为i<n-m的话,如果遇到n=m=1的情况会出现错误;所以应该设为n-m+1
int strStr(string haystack, string needle) {int n=haystack.length();int m=needle.length();bool ack=0;for(int i=0;i<n-m+1;i++){if(haystack[i]==needle[0]){ack=1;for (int j=0;j<m;j++){if(haystack[i+j]!=needle[j]){ack=0;} }if(ack)return i;}}return -1;}