DEV Community

shine
shine

Posted on

[📝LeetCode #290] Word Pattern

🎀 The Problem

Given a pattern and a string s, find if s follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s.

Example:

Input: pattern = "abba", s = "dog cat cat dog"
Output: true

👩‍💻 My Answer

class Solution {
    public boolean wordPattern(String pattern, String s) {
        HashMap map = new HashMap();
        int count = 0, wordcount = 0;
        String word = "";

        for (int i = 0; i < s.length(); i++) {
            char letter = s.charAt(i);

            if (count == pattern.length())
                return false;

            if (letter !=  ' ')
                word += letter;

            if (i == s.length() - 1 || word != "" && letter == ' ' ){
                char key = pattern.charAt(count);

                if (!map.containsKey(key))
                        if (!map.containsValue(word)) {
                            map.put(key, word);
                            wordcount++;
                        }
                        else
                            return false;
                else if (map.containsKey(key))
                    if (!map.get(key).equals(word))
                        return false;
                    else 
                        wordcount++;

                count++;
                word = "";
            }
        }

        if (wordcount != pattern.length())
            return false;

        return true;
    }
}
Enter fullscreen mode Exit fullscreen mode

Runtime & Memory

Pro & Con

  • ✖️ Runtime & Memory

💋 Ideal Answer

Approach

Ok, I did not know there is a library that can split words by " " and store them into the String[]. This lack of knowledge costs me so many lines and runtime.

Here is my new code that BEATS 100%.

New Code

class Solution {
    public boolean wordPattern(String pattern, String s) {
        String[] words = s.split(" ");

        if (words.length != pattern.length())
            return false;

        HashMap map = new HashMap();

        for (int i = 0; i < words.length; i++) {
            char key = pattern.charAt(i);

            if (!map.containsKey(key) && !map.containsValue(words[i]))
                        map.put(key, words[i]);
            else if (map.containsKey(key) && map.get(key).equals(words[i]))
                continue;
            else
                return false;
        }

        return true;
    }
}
Enter fullscreen mode Exit fullscreen mode

New Runtime & Memory

💡 What I Learned

  • How to separate the string by word and store them in a String[]. String[] words = STRING_NAME.split(" ");

Top comments (0)