【面试经典】单词规律
链接:290. 单词规律 - 力扣(LeetCode)
class Solution {
public boolean wordPattern(String pattern, String s) {
// 将字符串 s 按空格分割成单词数组
String[] words = s.split(" ");
// 定义两个映射:一个用于存储从单词到模式字符的映射
Map<String, Character> wordToCharMap = new HashMap<>();
// 另一个用于存储从模式字符到单词的映射
Map<Character, String> charToWordMap = new HashMap<>();
// 如果模式长度和单词数组长度不相等,则直接返回 false
if (pattern.length() != words.length) {
return false;
}
// 遍历模式和单词数组
for (int i = 0; i < words.length; i++) {
char c = pattern.charAt(i); // 获取当前模式字符
String word = words[i]; // 获取当前单词
// 检查当前模式字符是否已经存在于映射中
if (charToWordMap.containsKey(c)) {
// 如果存在,但对应的单词与当前单词不匹配,则返回 false
if (!charToWordMap.get(c).equals(word)) {
return false;
}
}
// 检查当前单词是否已经存在于映射中
else if (wordToCharMap.containsKey(word)) {
// 如果存在,但对应的模式字符与当前字符不匹配,则返回 false
if (!wordToCharMap.get(word).equals(c)) {
return false;
}
}
// 如果都未发生冲突,则建立当前字符与单词的映射
wordToCharMap.put(word, c);
charToWordMap.put(c, word);
}
// 如果遍历结束未发现不匹配,则返回 true
return true;
}
}