• [Swift]LeetCode3. 无重复字符的最长子串 | Longest Substring Without Repeating Characters


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

    Given a string, find the length of the longest substring without repeating characters.

    Examples:

    Given "abcabcbb", the answer is "abc", which the length is 3.

    Given "bbbbb", the answer is "b", with the length of 1.

    Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.


    给定一个字符串,找出不含有重复字符的最长子串的长度。

    示例 1:

    输入: "abcabcbb"
    输出: 3 
    解释: 无重复字符的最长子串是 "abc",其长度为 3。
    

    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 无重复字符的最长子串是 "b",其长度为 1。
    

    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 无重复字符的最长子串是 "wke",其长度为 3。
         请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。

    36ms
     1 class Solution {
     2     func lengthOfLongestSubstring(_ s: String) -> Int {
     3         var m:[Int] = [Int](repeating: -1,count: 256)
     4         var res:Int = 0, left:Int = -1
     5         for i in 0..<s.count
     6         {
     7             let num:Int = s[s.index(s.startIndex,offsetBy: i)].toInt()
     8             left = max(left,m[num])
     9             m[num] = i
    10             res = max(res,i - left)
    11         }
    12         return res
    13     }
    14 }
    15 //Character扩展方法  
    16 extension Character  
    17 {  
    18     func toInt() -> Int  
    19     {  
    20         var num:Int = Int()
    21         for scalar in String(self).unicodeScalars  
    22         {  
    23             num = Int(scalar.value)  
    24         }  
    25         return num  
    26     }  
    27 }

    20ms

     1 class Solution {
     2  func lengthOfLongestSubstring(_ s: String) -> Int {
     3      var right = 1
     4      var left = 0
     5      var i = 0
     6      var result = 0
     7      
     8      if s.count > 0 {
     9          result = right - left
    10          let chars = Array(s.utf8)
    11          
    12          //Interate in a incremental window 
    13          while right < chars.count {
    14              i = left
    15                 while i < right {
    16                     //Check if a duplicate is found
    17                     if chars[i] == chars[right] {
    18                         left = i + 1
    19                         break
    20                     } 
    21                 i = i + 1
    22              }
    23          result = max(result,right-left+1)     
    24          right = right + 1
    25      }
    26      }
    27      return result
    28      }
    29 }

    28ms

     1 class Solution {
     2  func lengthOfLongestSubstring(_ s: String) -> Int {
     3         if s.characters.count == 0 {
     4             return 0
     5         }
     6         
     7         let chars = Array(s.utf8)
     8         var left = 0
     9         var right = 1
    10         var result = right - left
    11         var i = 0
    12         
    13         while right < chars.count {
    14             i = left
    15             while i < right {
    16                 if chars[i] == chars[right] {
    17                     left = i + 1
    18                     break
    19                 }
    20                 i += 1
    21             }
    22             result = max(result, right - left + 1)
    23             right += 1
    24         }
    25         
    26         return result
    27     }
    28  }

    36ms

     1 class Solution {
     2     func lengthOfLongestSubstring(_ s: String) -> Int {
     3         var arr = [Int](repeating: -1, count: 256)
     4         var s = Array(s)
     5         var currentLength = 0
     6         var maxLength = 0
     7         for i in 0..<s.count {
     8             let cValue = Int(s[i].unicodeScalars.first!.value)
     9             let preIndex = arr[cValue]
    10             if arr[cValue] == -1 || i - preIndex > currentLength {
    11                 currentLength += 1
    12             } else {
    13                 maxLength = max(currentLength, maxLength)
    14                 currentLength = i - preIndex
    15             }
    16             arr[cValue] = i
    17         }
    18         
    19         maxLength = max(currentLength, maxLength)
    20         return maxLength
    21     }
    22 }

    44ms

     1 class Solution {
     2     func lengthOfLongestSubstring(_ s: String) -> Int {
     3         
     4         var last:[Int] = Array.init(repeating: -1, count: 127)
     5         var start: Int = 0 // 起始位置
     6         var maxLength: Int = 0  // 最大长度
     7         
     8         let chars: [Int8]? = s.cString(using: String.Encoding.utf8)
     9         
    10         for i in 0..<s.count {
    11             
    12             let hash_i: Int = Int(chars![i])
    13             let hash_null: Int = 0
    14             
    15             if (last[hash_i - hash_null] >= start) {
    16                 maxLength = max(maxLength, i-start)
    17                 start = last[hash_i - hash_null] + 1
    18             }
    19             last[hash_i - hash_null] = i
    20         }
    21         maxLength = max(maxLength, s.count - start)
    22         return maxLength
    23     }
    24 }

    52ms

     1 class Solution {
     2     func lengthOfLongestSubstring(_ s: String) -> Int {
     3         let charArr = Array(s)
     4         let len = s.count
     5         var ans = 0
     6         var index = Array.init(repeating: 0, count: 128)
     7         var j = 0
     8         for i in 0..<len {
     9             let char = charArr[i]
    10             if let v = char.unicodeScalars.first?.value {
    11                 j = max(index[Int(v)], j)
    12                 ans = max(ans, i - j + 1)
    13                 index[Int(v)] = i + 1
    14             }
    15         }
    16         return ans
    17     }
    18 }

    84ms

     1 class Solution {
     2     func lengthOfLongestSubstring(_ s: String) -> Int {
     3         let cs = s.cString(using: .utf8)
     4         guard var chars = cs else { return 0 }
     5         guard chars.count > 1 else {
     6             return 0
     7         }
     8         chars.removeLast()
     9         var maxCount: Int = 0
    10         var i = 0, j = 0
    11         var map: [Int8: Int] = [:]
    12         while j < chars.count {
    13             if map.keys.contains(chars[j]) {
    14                 i = max(map[chars[j]] ?? 0, i)
    15             }
    16             maxCount = max(maxCount, j - i + 1)
    17             map[chars[j]] = j + 1
    18             j += 1
    19         }
    20         return maxCount
    21     }
    22 }
  • 相关阅读:
    重新梳理HTML基础知识
    Bootstrap响应式栅格系统的设计原理
    php 循环爬虫 or 持久执行任务 总断掉服务 解决,flush(),ob_flush()的组合使用
    Linux中工作目录切换命令
    Linux中系统状态检测命令
    Linux系统中rm删除命令
    Linux中touch命令使用(创建文件)
    Linux中 mkdir 创建文件夹命令
    Linux 中 cp 命令(文件复制)
    Linux中 mv(文件移动)
  • 原文地址:https://www.cnblogs.com/strengthen/p/9858659.html
Copyright © 2020-2023  润新知