如果我们可以将小写字母插入模式串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".
这道题核心是匹配字符串,最开始理解成前缀匹配,最后发现匹配模式:ControlPanel对应CooP这个模式返回结果是true,说明不是前缀匹配。
为了解决这个问题,思路如下:
具体的代码实现:
- private boolean isMatch(String word, String pattern) {
- int l1 = 0;
- int l2 = 0;
-
- while (l1 < word.length() && l2 < pattern.length()) {
- if (word.charAt(l1) == pattern.charAt(l2)) {
- l1++;
- l2++;
- } else {
- if (Character.isUpperCase(word.charAt(l1))) {
- return false;
- }
- l1++;
- }
- }
- while (l1 < word.length()) {
- if (Character.isUpperCase(word.charAt(l1))) {
- return false;
- }
- l1++;
- }
-
- return l2 == pattern.length();
- }
下面图示说明:











代码实现如下:
-
- import java.util.ArrayList;
- import java.util.List;
-
- class Solution {
- public List
camelMatch(String[] queries, String pattern) { -
- List
res = new ArrayList<>(queries.length); - for (String query : queries) {
- res.add(isMatch(query, pattern));
- }
- return res;
- }
-
-
- private boolean isMatch(String word, String pattern) {
- int l1 = 0;
- int l2 = 0;
-
- while (l1 < word.length() && l2 < pattern.length()) {
- if (word.charAt(l1) == pattern.charAt(l2)) {
- l1++;
- l2++;
- } else {
- if (Character.isUpperCase(word.charAt(l1))) {
- return false;
- }
- l1++;
- }
- }
- while (l1 < word.length()) {
- if (Character.isUpperCase(word.charAt(l1))) {
- return false;
- }
- l1++;
- }
-
- return l2 == pattern.length();
- }
-
-
- public static void main(String[] args) {
- Solution solution = new Solution();
- System.out.println(solution.camelMatch(new String[]{"FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"}, "FB"));
- System.out.println(solution.camelMatch(new String[]{"CompetitiveProgramming", "CounterPick", "ControlPanel"}, "CooP"));
- }
- }
这道题核心就是字符串匹配,匹配时要考虑出现大写字符的case;如果有更加简洁、高效的代码,欢迎回复。