天天看點

LeetCode-Word Pattern

Descripton:

Given a pattern and a string str, find if str 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 str.

Example 1:

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

Example 2:

Input:pattern = "abba", str = "dog cat cat fish"
Output: false      

Example 3:

Input: pattern = "aaaa", str = "dog cat cat dog"
Output: false      

Example 4:

Input: pattern = "abba", str = "dog dog dog dog"
Output: false      

Notes:

  • You may assume pattern contains only lowercase letters, and str contains lowercase letters that may be separated by a single space.
Java
class Solution {
    public boolean wordPattern(String pattern, String str) {
        HashMap<Character, Integer> patternMap = new HashMap<>();
        StringBuilder patternStr = new StringBuilder();
        int count = 0;
        for (char ch : pattern.toCharArray()) {
            if (!patternMap.containsKey(ch)) {
                patternMap.put(ch, count++);
            }
            patternStr.append(patternMap.get(ch));
        }
        HashMap<String, Integer> strMap = new HashMap<>();
        StringBuilder strStr = new StringBuilder();
        count = 0;
        for (String s : str.split(" ")) {
            if (!strMap.containsKey(s)) {
                strMap.put(s, count++);
            }
            strStr.append("" + strMap.get(s));
        }
        
        return patternStr.toString().equals(strStr.toString());
    }
}