leetcode原题链接找出字符串中第一个匹配项的下标

         ms-hot目录:  ms-hot目录

        上一篇本文是第一篇

        下一篇:

题目描述

        给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回  -1 

示例 1:

输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。

示例 2:

输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。

解题方法:遍历两个数组,用一个start保存主串的第一个相同的位置。遍历过程中,分别用i,j记录主串和pattern串的当前位置,如果对应位置的值相同,则i++, j++;如果不相等,则i从start的下一个位置开始,j从0开始重新遍历。

C++代码

class Solution {
public:
    int strStr(string haystack, string needle) {
        int haystack_n = haystack.size();
        int needle_n = needle.size();
        int start = 0;
        int i = 0; //遍历主串
        int j = 0; //遍历匹配串
        while (i < haystack_n) {
            start = i; //记录主串扫描的起始位置
            while (j < needle_n) {
                if (haystack[i] == needle[j]) {
                    i++;
                    j++;
                } else {
                    i = start + 1;
                    j = 0;
                    break;
                }
            }
            if (j == needle_n) {
                return start;
            }
        }
        return -1;
    }
};

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部