G
N
I
D
A
O
L

如果我们可以将小写字母插入模式串 pattern 得到待查询项 query,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。)

给定待查询列表 queries,和模式串 pattern,返回由布尔值组成的答案列表 answer。只有在待查项  queries[i] 与模式串 pattern 匹配时, answer[i]  才为 true,否则为 false。

题目链接:https://leetcode.cn/problems/camelcase-matching/

# 解题思路

双指针:详细看代码注释

# 执行结果

image.png

# 代码

class Solution {
    public List<Boolean> camelMatch(String[] queries, String pattern) {
        List<Boolean> ret = new ArrayList<>(queries.length);
        for (String s : queries) {
            ret.add(match(s, pattern));
        }
        return ret;
    }
    private boolean match(String s, String p) {
        if (s == null || p == null || p.length() < 1 || s.length() < p.length()) 
            return false;
        
        int ls = s.length(), ps = p.length();
        int j = 0;
        for (int i = 0; i < ls; ++i) {
            if (j < ps) {
                // 相等,则往后匹配下一个字符
                if (p.charAt(j) == s.charAt(i)) ++j;
                else if (Character.isUpperCase(s.charAt(i))) {
                    // 当前待匹配的字符为大写,且与 p 中当前待匹配的字符不相等
                    return false;
                }
                // 当前待匹配的字符为小写,可以通过添加获得,继续下一个
            } else if (Character.isUpperCase(s.charAt(i))) {
                // 当前待匹配的字符为大写
                return false;
            }
        }
        // 所有字符都匹配完成
        return j == ps;
    }
}
更新于 阅读次数

😉觉得写的还不错,请我喝杯咖啡吧😁

独步凌波 微信支付

微信支付

独步凌波 支付宝

支付宝