码迷,mamicode.com
首页 > 其他好文 > 详细

【Leetcode】Word Pattern

时间:2016-06-12 02:25:57      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:https://leetcode.com/problems/word-pattern/

题目:

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:

  1. pattern = "abba", str = "dog cat cat dog" should return true.
  2. pattern = "abba", str = "dog cat cat fish" should return false.
  3. pattern = "aaaa", str = "dog cat cat dog" should return false.
  4. 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.

思路:

1、pattern字符相等的位置对应的字符串中的单词应该是相等的,pattern字符不相等的位置对应的字符串中单词应该也是不相等的。时间复杂度为

O(n^2),空间复杂度为O(1)。

2、用HashMap存储字符到单词的映射关系,时间复杂度为O(n),空间复杂度为O(n)。
算法1:

[java] view plain copy
 技术分享技术分享
  1. public boolean wordPattern(String pattern, String str) {  
  2.     String strs[] = str.split(" ");  
  3.     char patterns[] = pattern.toCharArray();  
  4.   
  5.     if (strs.length != patterns.length || strs.length == 0) {  
  6.         return false;  
  7.     }  
  8.   
  9.     for (int i = 0; i < patterns.length; i++) {  
  10.         for (int j = i + 1; j < patterns.length; j++) {  
  11.             if (patterns[i] == patterns[j]) { // 字符相等的时候,单词应该相等  
  12.                 if (!strs[i].equals(strs[j])) {  
  13.                     return false;  
  14.                 }  
  15.             } else { // 字符不相等的时候,单词也应该不相等  
  16.                 if (strs[i].equals(strs[j])) {  
  17.                     return false;  
  18.                 }  
  19.             }  
  20.         }  
  21.     }  
  22.     return true;  
  23. }  


算法2:

[java] view plain copy
 技术分享技术分享
  1. public boolean wordPattern(String pattern, String str) {  
  2.     String strs[] = str.split(" ");  
  3.     char patterns[] = pattern.toCharArray();  
  4.     HashMap<Character,String> map = new HashMap<Character,String>();  
  5.     HashMap<String,Character> map2 = new HashMap<String,Character>();  
  6.     if (strs.length != patterns.length || strs.length == 0) {  
  7.         return false;  
  8.     }  
  9.     for (int i = 0; i < patterns.length; i++) {  
  10.         if(!map.containsKey(patterns[i])){  
  11.             map.put(patterns[i], strs[i]);  
  12.         }else{  
  13.             if(!map.get(patterns[i]).equals(strs[i])){  
  14.                 return false;  
  15.             }  
  16.         }  
  17.           
  18.         if(!map2.containsKey(strs[i])){  
  19.             map2.put(strs[i], patterns[i]);  
  20.         }else{  
  21.             if(!map2.get(strs[i]).equals(patterns[i])){  
  22.                 return false;  
  23.             }  
  24.         }  
  25.     }  
  26.     return true;  
  27. }  

【Leetcode】Word Pattern

标签:

原文地址:http://blog.csdn.net/yeqiuzs/article/details/51622679

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!