给定一种规律 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
包含了由单个空格分隔的小写字母。
经典双射 ,字典
public class Solution {
public bool WordPattern(string pattern, string s) {
string[] arr = s.Split(' ');
if(pattern.Length != arr.Length) return false;
Dictionary<char,string> p2s = new Dictionary<char,string>();
Dictionary<string,char> s2p = new Dictionary<string,char>();
for(int i = 0; i < pattern.Length; i++){
if(!p2s.ContainsKey(pattern[i]) && !s2p.ContainsKey(arr[i])){
p2s[pattern[i]] = arr[i];
s2p[arr[i]] = pattern[i];
} else if(p2s.ContainsKey(pattern[i]) && p2s[pattern[i]] != arr[i] ||
s2p.ContainsKey(arr[i]) && s2p[arr[i]] != pattern[i]
) return false;
}
return true;
}
}