zoukankan      html  css  js  c++  java
  • [Swift]LeetCode290. 单词模式 | Word Pattern

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9756948.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given a pattern and a string str, find if str follows the same pattern.

    Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.

    Example 1:

    Input: pattern = "abba", str = "dog cat cat dog"
    Output: true

    Example 2:

    Input:pattern = "abba", str = "dog cat cat fish"
    Output: false

    Example 3:

    Input: pattern = "aaaa", str = "dog cat cat dog"
    Output: false

    Example 4:

    Input: pattern = "abba", str = "dog dog dog dog"
    Output: false

    Notes:
    You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.


     给定一种 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 包含了由单个空格分隔的小写字母。    


     12ms

     1 class Solution {
     2     func wordPattern(_ pattern: String, _ str: String) -> Bool {
     3         var strArr = str.components(separatedBy: " ");
     4         if pattern.count != strArr.count {
     5             return false
     6         }
     7         var keyValueDic = Dictionary<Character, String>()
     8         var keyValueDic2 = Dictionary<String, Character>()
     9         for (index,key) in pattern.enumerated() {
    10             let tempStr = keyValueDic[key]
    11             if tempStr == nil {
    12                 if keyValueDic2[strArr[index]] != nil {
    13                     return false;
    14                 }
    15                 keyValueDic[key] = strArr[index]
    16                 keyValueDic2[strArr[index]] = key
    17             }
    18             else {
    19                 if tempStr == strArr[index] && keyValueDic2[tempStr!] == key {
    20                     continue
    21                 }
    22                 else {
    23                     return false
    24                 }
    25             }
    26         }
    27         return true
    28     }
    29 }

    12ms

     1 class Solution {
     2  func wordPattern(_ pattern: String, _ str: String) -> Bool {
     3     
     4     let patternArr = Array(pattern)
     5     let strArr = str.split(separator: " ").map{String($0)}
     6     
     7     var patternDict = [Character:Int]()
     8     var strDict = [String:Int]()
     9     
    10     var tempP = 0
    11     var tempS = 0
    12 
    13     for i in patternArr {
    14         if patternDict[i] == nil {
    15             patternDict[i] = tempP
    16             tempP += 1
    17         }
    18     }
    19 
    20     for i in strArr {
    21         if strDict[i] == nil {
    22             strDict[i] = tempS
    23             tempS += 1
    24         }
    25     }
    26     
    27     var resultPattern = [Int]()
    28     var resultStr = [Int]()
    29     
    30     for i in patternArr {
    31         resultPattern.append(patternDict[i]!)
    32     }
    33     
    34     for i in strArr {
    35         resultStr.append(strDict[i]!)
    36     }
    37     
    38     print(resultPattern)
    39     print(resultStr)
    40     print(resultPattern == resultStr)
    41     return resultPattern == resultStr
    42   }
    43 }

    16ms

     1 class Solution {
     2     func wordPattern(_ pattern: String, _ str: String) -> Bool {
     3         let wordArr = str.components(separatedBy: " ")
     4         if pattern.count != wordArr.count {
     5             return false
     6         }
     7 
     8         var patternMap: [String: String] = [String: String]()
     9 
    10         for (n,x) in pattern.enumerated() {
    11             let strX = String(x)
    12             if patternMap[strX] == nil {//没有strx这个key
    13                 let word = wordArr[n]
    14                 let flag = patternMap.values.contains(word)
    15                 if !flag {
    16                     patternMap[strX] = word
    17                 }else {
    18                     return false
    19                 }
    20             }else {
    21                 if patternMap[strX] != wordArr[n] {
    22                     return false
    23                 }
    24             }
    25         }
    26         return true
    27     }
    28 }

    20ms

     1 class Solution {
     2     func wordPattern(_ pattern: String, _ str: String) -> Bool {
     3         let strArr = str.split(separator: " ")
     4         var dic = [Character: String]()
     5         if strArr.count != pattern.characters.count || Set(strArr).count != Set(pattern.characters).count{
     6         return false
     7     }
     8     
     9     for (i, v) in pattern.characters.enumerated(){
    10         if dic[v] == nil{
    11             dic[v] = String(strArr[i])
    12         }else{
    13             if dic[v] != String(strArr[i]){
    14                 return false
    15             }
    16         }
    17     }
    18     return true
    19     }
    20 }
  • 相关阅读:
    Linux命令之cat
    Linux命令之diff
    Linux查看内核信息或系统信息
    Linux命令之touch
    linux脚本:shell, 判断输入参数的个数(命令行)
    c++中try catch的用法
    linux命令:ftp
    linux shell种类
    linux shell脚本:在脚本中实现读取键盘输入,根据输入判断下一步的分支
    c语言,gdb
  • 原文地址:https://www.cnblogs.com/strengthen/p/9756948.html
Copyright © 2011-2022 走看看