leetcode1023驼峰式匹配

  1. 题目描述
  2. 示例
    1. 示例1
    2. 示例2
    3. 示例3
  3. 实现逻辑
  4. 实现代码
  5. 联系作者
    1. 微信公众号
    2. QQ群

题目描述

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

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

示例

示例1

输入:queries = [“FooBar”,”FooBarTest”,”FootBall”,”FrameBuffer”,”ForceFeedBack”], pattern = “FB”
输出:[true,false,true,true,false]
解释:
“FooBar” 可以这样生成:”F” + “oo” + “B” + “ar”。
“FootBall” 可以这样生成:”F” + “oot” + “B” + “all”.
“FrameBuffer” 可以这样生成:”F” + “rame” + “B” + “uffer”.

示例2

输入:queries = [“FooBar”,”FooBarTest”,”FootBall”,”FrameBuffer”,”ForceFeedBack”], pattern = “FoBa”
输出:[true,false,true,false,false]
解释:
“FooBar” 可以这样生成:”Fo” + “o” + “Ba” + “r”.
“FootBall” 可以这样生成:”Fo” + “ot” + “Ba” + “ll”.

示例3

输出:queries = [“FooBar”,”FooBarTest”,”FootBall”,”FrameBuffer”,”ForceFeedBack”], pattern = “FoBaT”
输入:[false,true,false,false,false]
解释:
“FooBarTest” 可以这样生成:”Fo” + “o” + “Ba” + “r” + “T” + “est”.

实现逻辑

维护一个下标p,用来遍历pattern,然后遍历queries[i] 中的每个字符 c:

  • 如果 p < pattern.length,并且pattern[p]=c,那么令 p 加 1。
  • 否则,考虑c是否是一个大写字母。如果是,则匹配失败;如果不是,则该小写字母可以插入pattern 来与queries[i] 匹配,因此,我们可以继续遍历下一个字符。
  • queries[i] 遍历结束后,如果p < pattern.length,则表示pattern 中还有字符未被匹配,queries[i] 与pattern 匹配失败。其余情况pattern 匹配完毕,匹配成功。

实现代码

import java.util.ArrayList;
import java.util.List;

public class Solution1023 {
    public static List<Boolean> camelMatch(String[] queries, String pattern) {
        List<Boolean> result = new ArrayList<>();
        for(String query: queries){
            boolean isMatch = true;
            int p = 0;

            for(int i=0; i<query.length(); i++){
                char c = query.charAt(i);
                if(p<pattern.length() && pattern.charAt(p) == c){
                    p++;
                }else if(Character.isUpperCase(c)){
                    isMatch = false;
                    break;
                }
            }
            if(p<pattern.length()){
                isMatch = false;
            }

            result.add(isMatch);
        }
        return result;
    }

    public static void main(String[] args) {
        String queries[] = new String[]{"FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"};
        String pattern = "FoBaT";
        List<Boolean> result = camelMatch(queries, pattern);
        System.out.println(result);
    }
}

联系作者

微信公众号

xiaomingxiaola
(BossLiu)

QQ群

58726094


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 384276224@qq.com

×

喜欢就点赞,疼爱就打赏

日记本 网文世界