题目
链接:https://leetcode-cn.com/problems/word-pattern
给定一种规律 pattern
和一个字符串 str
,判断 str
是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern
里的每个字母和字符串 str
中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
哈希表
pattern中的每一个字符与str中的唯一一个单词对应,str中的一个单词也与pattern中的唯一一个字符对应。
使用哈希表记录每一个字符对应的字符串,记录每一个字符串对应的字符,如果发现两者的对应关系出现错误则返回false,最后比较str是否匹配完毕即可
class Solution {
public boolean wordPattern(String pattern, String s) {
String[] ch2str = new String[26];
Map<String, Character> str2ch = new HashMap<>();
int i = 0;
for (int p = 0; p < pattern.length(); p++) {
if (i >= s.length())
return false;
char c = pattern.charAt(p);
int j = i;
while (j < s.length() && s.charAt(j) != ' ') {
j++;
}
String letter = s.substring(i, j);
i = j + 1;
if (str2ch.containsKey(letter) && str2ch.get(letter) != c) {
return false;
}
if (ch2str[c - 'a'] != null && !ch2str[c - 'a'].equals(letter)) {
return false;
}
ch2str[c - 'a'] = letter;
str2ch.put(letter, c);
}
return i >= s.length();
}
}