zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    【CITE】当类库项目中无法使用Application.StartupPath的时侯 (注:主要是在进行反射读取文件的时候!!)
    设置pictureBox的边框颜色
    怎么在Form1调用Form2中的成员?
    【CITE】DrawImage方法详解(转)
    Python-正则表达式实现计算器功能
    Python-面向对象进阶
    Python基础-封装与扩展、静态方法和类方法
    Python基础-接口与归一化设计、抽象类、继承顺序、子类调用父类,多态与多态性
    Python基础-继承与派生
    Python基础-月考
  • 原文地址:https://www.cnblogs.com/strengthen/p/9858659.html
Copyright © 2011-2022 走看看