题目链接
描述
如果我们可以将小写字母插入模式串
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 <= 100
1 <= queries[i].length <= 100
1 <= pattern.length <= 100
- 所有字符串都仅由大写和小写英文字母组成。
解题思路
使用双重循环遍历queries,定义一个指针p原来指向pattern,如果p小于pattern的长度并且当前p指向的字符与queries双重循环目前指向的字符相同说明匹配成功,p向后移一位;若pattern遍历完全且queries当前字符为大写字符则代表无法匹配;若当前queries中的一条数据遍历完成而pattern还未遍历完成则说明当前的数据无法匹配。
Java代码
class Solution {
public List<Boolean> camelMatch(String[] queries, String pattern) {
int q_length = queries.length;
List<Boolean> answer = new ArrayList<Boolean>();
for(int i = 0; i < q_length; i++){
int p = 0;
boolean flag = true;
for(int j = 0; j < queries[i].length(); j++){
char c = queries[i].charAt(j);
if(p < pattern.length() && pattern.charAt(p) == c){
p++;
}else if(Character.isUpperCase(c)){
flag = false;
}
}
if(p < pattern.length()){
flag = false;
}
answer.add(flag);
}
return answer;
}
}