290. Word Pattern

290. Word Pattern

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 1:

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

Example 2:

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

Example 3:

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

Example 4:

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

Constraints:

  • 1 <= pattern.length <= 300

  • pattern contains only lower-case English letters.

  • 1 <= s.length <= 3000

  • s contains only lower-case English letters and spaces ' '.

  • s does not contain any leading or trailing spaces.

  • All the words in s are separated by a single space.

My Solutions:

建立一个map,key是pattern里的字母,value是字母在pattern里的index。如果符合条件,key也应该是str里的单词,value是单词在str里的顺序。如果map在取两种类型的key时,得到的index/顺序不一样,return false。

public class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] strs = str.split(" ");
        if (strs.length != pattern.length()) return false;
        Map m = new HashMap();
        for (Integer i=0; i < strs.length; i++) {
            if (m.put(pattern.charAt(i), i) != m.put(strs[i], i)) return false;
        }
        return true;
    }
}

Last updated