Camelcase Matching
MediumUpdated: Aug 2, 2025
Practice on:
Problem
Given an array of strings queries and a string pattern, return a boolean array answer where answer[i] is true if queries[i] matches pattern, and false otherwise.
A query word queries[i] matches pattern if you can insert lowercase English letters pattern so that it equals the query. You may insert each character at any position and you may not insert any characters.
Examples
Example 1:
Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FB"
Output: [true,false,true,true,false]
Explanation: "FooBar" can be generated like this "F" + "oo" + "B" + "ar".
"FootBall" can be generated like this "F" + "oot" + "B" + "all".
"FrameBuffer" can be generated like this "F" + "rame" + "B" + "uffer".
Example 2:
Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBa"
Output:
[true,false,true,false,false]
Explanation: "FooBar" can be generated like this "Fo" + "o" + "Ba" + "r".
"FootBall" can be generated like this "Fo" + "ot" + "Ba" + "ll".
Example 3:
Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBaT"
Output: [false,true,false,false,false]
Explanation: "FooBarTest" can be generated like this "Fo" + "o" + "Ba" + "r" + "T" + "est".
Solution
Method 1 - Iterating Over Chars with 2 Pointers on Query and Pattern
Code
Java
public List<Boolean> camelMatch(String[] queries, String pattern) {
return Arrays.stream(queries).map(q -> isMatch(q, pattern)).collect(Collectors.toList());
}
public boolean isMatch(String query, String pattern) {
int j = 0; // j for pattern and i for query
for(int i = 0; i < query.length(); i++) {
char c = query.charAt(i);
if(j < pattern.length() && pattern.charAt(j) == c) {
j++;
}else if(Character.isUpperCase(c)) {
return false;
}
}
return j == pattern.length();
}