290. Word Pattern

Description

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.

Examples:
pattern = "abba", str = "dog cat cat dog" should return true.
pattern = "abba", str = "dog cat cat fish" should return false.
pattern = "aaaa", str = "dog cat cat dog" should return false.
pattern = "abba", str = "dog dog dog dog" should return false.
Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

Solution

使用跟Isomorphic Strings相同的解法。感觉lower letters没有被用起来啊。。是不是哪里miss掉了?

Iterative, time O(n^2), space O(n)

重点:

  • 利用string split方法分割word
  • 利用HashMap的containsValue方法,注意是O(n)的复杂度哦。可以使用额外空间来避免该方法的调用。
class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] words = str.split(" ");
        if (pattern.length() != words.length) {
            return false;
        }
        
        Map<Character, String> map = new HashMap<>();
        for (int i = 0; i < pattern.length(); ++i) {
            char c = pattern.charAt(i);
            String word = words[i];
            
            if (!map.containsKey(c)) {
                if (map.containsValue(word)) {
                    return false;
                } else {
                    map.put(c, word);
                }
            } else if (!map.get(c).equals(word)) {
                return false;
            }
        }
        
        return true;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容