給定一種規律 pattern 和一個字串 str ,判斷 str 是否遵循相同的規律。
阿新 • • 發佈:2021-01-25
給定一種規律 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"
輸入: 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 不一致,返回false return 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 } }