使用哈希表可以解决的问题
LeetCode 383. 赎金信-CSDN博客
Leetcode 49 字母异位词分组-CSDN博客
LeetCode 242 有效的字母异位词-CSDN博客
题目
已解答
简单
相关标签
相关企业
给定一种规律
pattern
和一个字符串s
,判断s
是否遵循相同的规律。这里的 遵循 指完全匹配,例如,
pattern
里的每个字母和字符串s
中的每个非空单词之间存在着双向连接的对应规律。示例1:
输入: pattern = "abba", s = "dog cat cat dog" 输出: true
示例 2:
输入:pattern = "abba", s = "dog cat cat fish" 输出: false
示例 3:
输入: pattern = "aaaa", s = "dog cat cat dog" 输出: false
提示:
1 <= pattern.length <= 300
pattern
只包含小写英文字母1 <= s.length <= 3000
s
只包含小写英文字母和' '
s
不包含 任何前导或尾随对空格s
中每个单词都被 单个空格分隔
思路
该题思路与LeetCode205 同构字符串一样,都是判断对应关系是否唯一的
所以也是同样用两个map,一个记录a:dog这样的映射规律,一个map记录dog:a这样的映射记录
当map中key存在时,如果值与当前遍历的值不相同,就返回false
代码
java
class Solution {
public boolean wordPattern(String pattern, String s) {
HashMap<Character, String> map = new HashMap<>();
HashMap<String, Character> map1 = new HashMap<>();
int length = pattern.length();
String[] s1 = s.split(" ");
int length1 = s1.length;
//长度不相等,直接返回false
if (length1 != length) {
return false;
}
for (int i = 0; i < length1; i++) {
char c = pattern.charAt(i);
String ss = s1[i];
//判断a:dog规律是否满足
if (map.containsKey(c)) {
String s2 = map.get(c);
if (!ss.equals(s2)) {
return false;
}
//判断dog:a规律是否满a
}else if(map1.containsKey(ss)){
Character cc = map1.get(ss);
if (!cc.equals(c)) {
return false;
}
//不存在就放入map
} else {
map.put(c,ss);
map1.put(ss,c);
}
}
return true;
}
}