[Swift]LeetCode387. 字符串中的第一个唯一字符 | First Unique Character in a String
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9776962.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.
Examples:
s = "leetcode" return 0. s = "loveleetcode", return 2.
Note: You may assume the string contain only lowercase letters.
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode" 返回 0. s = "loveleetcode", 返回 2.
注意事项:您可以假定该字符串只包含小写字母。
1 class Solution { 2 func firstUniqChar(_ s: String) -> Int { 3 //把英文字符都存入数组中 4 var arr = Array<Int>(repeating: 0, count: 26) 5 for asc in s.unicodeScalars 6 { 7 let num:Int = Int(asc.value - 97) 8 //记录字符出现的次数 9 arr[num] += 1 10 } 11 //再次循环字符串,使用enumerated()获取到字符串的索引 12 for (index, asc) in s.unicodeScalars.enumerated() 13 { 14 let count = arr[Int(asc.value - 97)] 15 if count == 1 { 16 return index 17 } 18 } 19 return -1 20 } 21 }
104ms
1 class Solution { 2 func firstUniqChar(_ s: String) -> Int { 3 var list:[Int] = [Int](repeating: 0, count: 26) 4 for charCode in s.unicodeScalars { 5 let tempIndex:Int = Int(charCode.value) - 97 6 list[tempIndex] += 1 7 } 8 9 var index = 0 10 for charCode in s.unicodeScalars { 11 let tempIndex:Int = Int(charCode.value) - 97 12 if list[tempIndex] == 1 { 13 return index 14 } 15 index += 1 16 } 17 return -1 18 } 19 }
128ms
1 class Solution { 2 func firstUniqChar(_ s: String) -> Int { 3 var countFor = Array(repeating:0, count:26) 4 let offset = 97 5 for charCode in s.utf8 { 6 let adjustedCharCode = Int(charCode) - offset 7 countFor[adjustedCharCode] += 1 8 } 9 for (i, charCode) in s.utf8.enumerated() { 10 let adjustedCharCode = Int(charCode) - offset 11 if countFor[adjustedCharCode] == 1 { 12 return i 13 } 14 } 15 return -1 16 } 17 }