开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 30 天,点击查看活动详情
题目:LeetCode
如果我们可以将小写字母插入模式串 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".
提示:
1 <= queries.length <= 1001 <= queries[i].length <= 1001 <= pattern.length <= 100- 所有字符串都仅由大写和小写英文字母组成。
解题思路
由题意分析知:就是在queries字符串中寻找pattern子序列,如果能匹配则其余值不含有大写字母,则匹配成功,否则匹配失败 失败的形式:
- str中含有其他大写字母
- str中没有匹配pattern 可以知道,当str长度小于pattern时,一定匹配失败, 当str长度大于等于pattern时,可以用双指针从左向右寻找匹配的字符,如果字符不匹配且str当前字符为大写字母,则匹配失败 最后判断str是否能完全匹配pattern
代码实现
public List < Boolean > camelMatch(String[] queries, String pattern) {
List < Boolean > res = new ArrayList < Boolean > ();
char[] pn = pattern.toCharArray();
int len = pn.length;
for (int i = 0; i < queries.length; i++) {
String str = queries[i];
if (str.length() < len) {
res.add(false);
continue;
} else {
char[] chars = str.toCharArray();
int inx = 0;
boolean flag = false;
for (int j = 0; j < chars.length; j++) {
if (inx < len && chars[j] == pn[inx]) {
inx++;
continue;
}
if (chars[j] < 'a') {
flag = true;
break;
}
}
if (flag || inx != len) {
res.add(false);
} else {
res.add(true);
}
}
}
return res;
}
运行结果
复杂度分析
- 空间复杂度:
- 时间复杂度:
在掘金(JUEJIN) 一起分享知识, Keep Learning!