题目描述
如果我们可以将小写字母插入模式串 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