#LeetCode:387. First Unique Character in a String

灆洢 2020-05-05 21:58:41

此題要找出在字串中只有出現過一次的字元其位於字串中的何處。如果有多個字元都只出現過一次,則輸出位置最小的;如果都沒有字元指出現過一次,則輸出 -1

此題就是將字串中的字元一個一個建立與其相對應的 index 表,並將已出現過的字元塞進「已出現過的字元集合」中。如果在建表過程中,某字元已經出現在「已出現過的字元集合」中的話,則略過它並將之從 index 表內刪除。建表完成後,就將 index 表中 index 最小的值拿出來即是答案。如果表內無值的話,則輸出 -1

Kotlin(240ms)

/*******************************************************
 * LeetCode 387. First Unique Character in a String    *
 * Author: Maplewing [at] knightzone.studio            *
 * Version: 2020/05/05                                 *
 *******************************************************/
class Solution {
    fun firstUniqChar(s: String): Int {
        var isAppeared = mutableSetOf<Char>()
        var characterToIndexMap = mutableMapOf<Char, Int>()

        for ((index, c) in s.withIndex()) {
            if (isAppeared.contains(c)) {
                if (characterToIndexMap.containsKey(c)) {
                    characterToIndexMap.remove(c)
                }
                continue
            }

            isAppeared.add(c)
            characterToIndexMap[c] = index
        }

        return characterToIndexMap.values.min() ?: -1
    }
}

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料