给定一种规律 pattern和一个字符串str,判断 str 是否遵循相同的规律。
这里的遵循指完全匹配,例如,pattern里的每个字母和字符串str中的每个非空单词之间存在着双向连接的对应规律。
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
输入:pattern = "abba", str = "dog cat cat fish"
输出: false
输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
输入: pattern = "abba", str = "dog dog dog dog"
输出: false
理解了题意, 思路还是比较好想的.pattern中的每个字符对应str中的每个单词, 建立一个hash表的映射,
1:判断字符串 pattern 与 s 的长度是否相等,不等则返回 false;
2:接下来遍历 pattern,用 pattern 的单个字符做为 map 的 key,s 的单个单词作为 map 的 value;这样处理了 pattern 到 s 的映射,
3:然后到pattern的下一个字符时, 检查map中是否有值了,
有值了,判断是否相等, 相等,继续下一个字符; 不相等,返回false;无值,把对应位置上的单词更新到map中
4:最后例子中还给到了一种情况,pattern = "abba", str = "dog dog dog dog" , a->dog , b->dog, 但是a!=b,还需要检查下map中的values是否有重复.
5: 上述检查都成功, 返回true
class Solution {func wordPattern(_ pattern: String, _ s: String) -> Bool {let array = s.split(separator: " ")// 1.检查元素个数是否相同if pattern.count != array.count {return false}var dic = [Character:String]()// 2.遍历取出每个字符for (i,oneChar) in pattern.enumerated() {// 3.字典中已经有值if let value = dic[oneChar] {// 3.1 检查字典中的值和array对应位置的值是否一致if value == array[i] {// 3.2 一致,继续下一轮} else {// 3.3 不一致,返回falsereturn false}} else {// 4.字典中无值,更新array值到map中dic[oneChar] = String(array[i])}}// 5.检查字典中的值是否有重复, 用一个set查重if dic.values.count != Set.init(dic.values).count {return false}return true}}
如果觉得《给定一种规律 pattern 和一个字符串 str 判断 str 是否遵循相同的规律。》对你有帮助,请点赞、收藏,并留下你的观点哦!