给定一种规律 pattern
和一个字符串 str
,判断 str
是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern
里的每个字母和字符串 str
中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern ="abba"
, str ="dog cat cat dog"
输出: true
示例 2:
输入:pattern ="abba"
, str ="dog cat cat fish"
输出: false
示例 3:
输入: pattern ="aaaa"
, str ="dog cat cat dog"
输出: false
示例 4:
输入: pattern ="abba"
, str ="dog dog dog dog"
输出: false
说明:
你可以假设 pattern
只包含小写字母, str
包含了由单个空格分隔的小写字母。
class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
ch2str, str2ch = {}, {}
ss = s.split(' ')
n = len(pattern)
if n != len(ss):
return False
for i in range(n):
if ch2str.get(pattern[i]) is not None and ch2str.get(pattern[i]) != ss[i]:
return False
if str2ch.get(ss[i]) is not None and str2ch.get(ss[i]) != pattern[i]:
return False
ch2str[pattern[i]] = ss[i]
str2ch[ss[i]] = pattern[i]
return True
class Solution {
public boolean wordPattern(String pattern, String s) {
Map<Character, String> ch2str = new HashMap<>();
Map<String, Character> str2ch = new HashMap<>();
String[] ss = s.split(" ");
int n = pattern.length();
if (n != ss.length) {
return false;
}
for (int i = 0; i < n; ++i) {
char ch = pattern.charAt(i);
if (ch2str.containsKey(ch) && !ch2str.get(ch).equals(ss[i])) {
return false;
}
if (str2ch.containsKey(ss[i]) && !str2ch.get(ss[i]).equals(ch)) {
return false;
}
ch2str.put(ch, ss[i]);
str2ch.put(ss[i], ch);
}
return true;
}
}