面试经典题---28.找出字符串中第一个匹配项的下标

28.找出字符串中第一个匹配项的下标

我的解法:

  • for循环从0到haystack.size()-needle.size()遍历haystack,一旦haystack[i]与needle[0]匹配上,就调用matchSize()函数来计算haystack子串与needle的匹配长度;
  • 若matchSize()函数得到的匹配子串长度等于needle的长度,则直接返回此时的起始下标i
class Solution {
    int matchSize(string h,string n){
        int count = 0;
        while(count < n.size() && h[count] == n[count]){
            count++;
        }
        return count;
    }
public:
    int strStr(string haystack, string needle) {
        if(haystack.size() < needle.size()){
            return -1;
        }
        int hlen = haystack.size(),nlen = needle.size();
        int size = 0;
        for(int i = 0; i <= hlen - nlen; ++i){
            if(haystack[i] == needle[0]){
                size = matchSize(haystack.substr(i,needle.size()),needle);
                if(size == nlen){
                    return i;
                }
            }
        }
        return -1;
    }
};

你可能感兴趣的:(算法,leetcode,c++)