7.28——leetcode 驼峰式匹配

驼峰式匹配

题目描述

7.28——leetcode 驼峰式匹配_第1张图片

代码

vector<bool> camelMatch(vector<string>& queries, string pattern) {
	vector<bool> ans(queries.size(), true);
	for (int k = 0; k < queries.size(); k++) {
		int j = 0;
        int i = 0;
        int tag = 1;
		while (i < queries[k].size() && j <pattern.size()) {
            //如果当前i对应的字母为大写,则queries中代匹配字符串忽略小写,直到碰上大写字母,如果相等则i++
			if (queries[k][i] == pattern[j]) {
				i++;
				j++;
			}
            //只要queries[k][i]是小写,就在pattern中加入queries[k][i]
			else if (queries[k][i] >= 'a'&&queries[k][i] <= 'z') {
				i++;
			}
            //只要queries[k][i]是大写字母且与pattern[j]就不匹配
            //此时pattern[j]可能是小写字母也可能是大写字母
			else if (queries[k][i] >= 'A'&&queries[k][i] <= 'Z') {
				ans[k] = false;             //ans是vector,所以可以用数组的插入方法
				break;
			}
		}
        //如果queries中代匹配字符串已经到了结尾,但是pattern中还有没匹配的大写字母(Step > 0)则break,false。
        //剩余字母有大写
		while (i < queries[k].size()) {
			if (queries[k][i] >= 'A'&&queries[k][i] <= 'Z') {
				ans[k] = false;
				break;
			}
			i++;
		}
        //剩余字母有大写
		while (j < <pattern.size()) {
			if (pattern[j] >= 'A' && pattern[j] <= 'Z') {
				ans[k] = false;
				break;
			}
			j++;
		}
	}
	return ans;
}

小结

这道题要注意细节,说到底其实是一类条件判断题,只要把条件准确的表示判断出来就ok了,可以这样理解,匹配到不一样且是大写字母的直接范围错误。

有看到题解中说用字典树,不知道是什么内容,有空遇到题再练练

修改

代码经评论区的要求修改过,如下:

class Solution {
public:
    vector<bool> camelMatch(vector<string>& queries, string pattern) {
        vector<bool> res;
        for(int k=0;k<queries.size();k++)
        {
            int j=0;
            int tag=1;
            for(int i=0;i<queries[k].size();i++)
            {
                if(queries[k][i]>='A'&&queries[k][i]<='Z')
                    if(j==pattern.size()||pattern[j]!=queries[k][i])
                        tag=0;
                if(pattern[j]==queries[k][i])
                    j++;
            }
            if(j==pattern.size()&&tag==1)
                res.push_back(true);
            else res.push_back(false);
        }
        return res;
    }
};

你可能感兴趣的:(leetcode)