290.单词规律
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
| 12
 
 | 输入: pattern = "abba", str = "dog cat cat dog"输出: true
 
 | 
示例 2:
| 12
 
 | 输入:pattern = "abba", str = "dog cat cat fish"输出: false
 
 | 
Solution
这道题显示是205 同构字符串的升级版本,当然也可以用其解法,难点在与需要以空格来隔断字符串,并且用substring函数来断开字符串
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 | class Solution {public boolean wordPattern(String pattern, String str) {
 Map<String, Character> str2ch = new HashMap<String, Character>();
 Map<Character, String> ch2str = new HashMap<Character, String>();
 int m = str.length();
 int i = 0;
 for (int p = 0; p < pattern.length(); ++p) {
 char ch = pattern.charAt(p);
 if (i >= m) {
 return false;
 }
 int j = i;
 while (j < m && str.charAt(j) != ' ') {
 j++;
 }
 String tmp = str.substring(i, j);
 if (str2ch.containsKey(tmp) && str2ch.get(tmp) != ch) {
 return false;
 }
 if (ch2str.containsKey(ch) && !tmp.equals(ch2str.get(ch))) {
 return false;
 }
 str2ch.put(tmp, ch);
 ch2str.put(ch, tmp);
 i = j + 1;
 }
 return i >= m;
 }
 }
 
 | 
也正如205一样,该题也有更为简单的办法,因为是以空格断开字符,直接用JAVA中的split(" ")就可以断开字符串了
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | class Solution {public boolean wordPattern(String pattern, String str) {
 String[] words = str.split(" ");
 if (words.length != pattern.length()) {
 return false;
 }
 Map<Object, Integer> map = new HashMap<>();
 
 for (Integer i = 0; i < words.length; i++) {
 if (map.put(pattern.charAt(i), i) != map.put(words[i], i)) {
 return false;
 }
 }
 return true;
 }
 }
 
 |