题目描述
- 给定一种规律
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
中每个单词都被 单个空格分隔
解题思路:
创建两个哈希表,表中记录字符的对应关系,如果字符的对应关系已经出现过了或不等于之间记录的对应关系,则返回false
题解:
java
class Solution {
public boolean wordPattern(String pattern, String s) {
String[]words=s.split(" ");
Map<String,Character>str2char=new HashMap<>();
Map<Character,String>char2str=new HashMap<>();
int n=words.length,m=pattern.length();
if(n!=m) return false;
for (int i = 0; i <n ; i++) {
Character c=pattern.charAt(i);
String str=words[i];
//一种为false的情况是:多个c对应于一个str
if(char2str.get(c)!=null&&!char2str.get(c).equals(str)){
return false;
}
//另一种为false的情况是:多个str对应于一个c
if(str2char.get(str)!=null&&!str2char.get(str).equals(c)){
return false;
}
str2char.put(str,c);
char2str.put(c,str);
}
return true;
}
}