算法每日一刷

LeetCode-387. 字符串中的第一个唯一字符(Swift

2019-07-17  本文已影响0人  entre_los_dos

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-unique-character-in-a-string

题目

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

案例:

s = "leetcode"
返回 0.

s = "loveleetcode",
返回 2.

方法1-

func firstUniqChar(_ s: String) -> Int {
        
        var charDic = [Character: Int]()
        var charIndex = [Int]()
        
        //遍历字符串,如果没有,存放在字典中,将index插入到数组中。如果有,index从v数组移除
        var index = 0
        for character in s {
            
            if (charDic.keys.contains(character)) {
                charIndex = charIndex.filter{$0 != charDic[character]}
            }else {
                charDic[character] = index
                charIndex.append(index)
            }
            index += 1
        }
        return charIndex.first ?? -1
        
    }

遍历字符串,如果没有重复,存放在字典中,将index插入到数组中。
如果有重复,index从v数组移除
速度很慢。

方法2

func firstUniqChar(_ s: String) -> Int {
        
        var result = -1
        
        var charDic = [Character: Int]()
        
        //遍历字符串,如果没有,存放在字典中,character:0。如果有charcter:num+1
        for character in s {
            
            if (charDic.keys.contains(character)) {
                let count = charDic[character] ?? 1
                charDic[character] = count + 1
                
            }else {
                charDic[character] = 1
            }
        }
        var index = 0
        
        for character in s {
            
            if charDic[character] == 1 {
                result = index
                break
            }
            index += 1
        }
        return result
        
    }

遍历字符串,如果没有,存放在字典中,将index插入到数组中。
如果有,index从v数组移除
遍历字符串,字典值为1的话,返回此index

上一篇下一篇

猜你喜欢

热点阅读