All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1001_1100.s1023_camelcase_matching.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1001_1100.s1023_camelcase_matching;

// #Medium #String #Two_Pointers #Trie #String_Matching
// #2022_02_26_Time_1_ms_(73.86%)_Space_43_MB_(6.82%)

import java.util.LinkedList;
import java.util.List;

/**
 * 1023 - Camelcase Matching\.
 *
 * Medium
 *
 * 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.
 *
 * **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".
 *
 * **Constraints:**
 *
 * *   `1 <= pattern.length, queries.length <= 100`
 * *   `1 <= queries[i].length <= 100`
 * *   `queries[i]` and `pattern` consist of English letters.
**/
public class Solution {
    public List camelMatch(String[] queries, String pattern) {
        List ret = new LinkedList<>();
        for (String query : queries) {
            ret.add(check(query, pattern));
        }
        return ret;
    }

    private Boolean check(String query, String pattern) {
        int patternLen = pattern.length();
        int patternPos = 0;
        int uppercaseCount = 0;
        for (int i = 0; i < query.length(); i++) {
            char c = query.charAt(i);
            if (Character.isUpperCase(c)) {
                if (patternPos < patternLen && c != pattern.charAt(patternPos)) {
                    return false;
                }
                uppercaseCount++;
                if (uppercaseCount > patternLen) {
                    return false;
                }
                patternPos++;
            } else {
                if (patternPos < patternLen && c == pattern.charAt(patternPos)) {
                    patternPos++;
                }
            }
        }

        return patternPos == patternLen;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy