失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 给定一种规律 pattern 和一个字符串 str 判断 str 是否遵循相同的规律。

给定一种规律 pattern 和一个字符串 str 判断 str 是否遵循相同的规律。

时间:2023-09-16 21:56:28

相关推荐

给定一种规律 pattern 和一个字符串 str  判断 str 是否遵循相同的规律。

给定一种规律 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 是否遵循相同的规律。》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。