leetcode 28 找出字符串中第一个匹配项的下标
一、问题描述

二、解题思路
整体思路
由于本题涉及到的是子串问题(连续)且具有单调性,所以可以使用滑动窗口来解决。
具体思路
本题可以使用定长的滑动窗口来解决:
定义两个变量left和right用于维护窗口的左、右端,当left<m时进行循环操作:
(1)首先,判断当前窗口中的子串是否符合题意,如果符合则直接返回left;
(2)否则,就后移窗口一位,由于为定长的滑动窗口,所以left和right都要加一;
如果遍历完后没有找到符合题意的子串,就返回-1;
三、代码实现
class Solution {
public:int strStr(string haystack, string needle) {//边界处理int m=haystack.size();int n=needle.size();if(m<n) return -1;//定长的滑动窗口for(int left=0,right=n-1;left<m;){//判断if(haystack.substr(left,n)==needle)return left;//窗口后移else{left++;right++;}}return -1;}
};