字符篇

1、第一個只出現(xiàn)一次的字符

問題描述:在字符串中找出第一個只出現(xiàn)一次的字符,如輸入‘bacbd’,輸出‘a(chǎn)’。要求時間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。

解題思路:
方法一:遍歷每個字符,當(dāng)訪問到某個字符時,在拿它與它后面的每個字符比較,如果比較完發(fā)現(xiàn)沒有與它重復(fù)的字符,即找到,否則,沒有找到。這種方法的時間復(fù)雜度為O(n*n),所以不滿足要求。
方法二:如果遍歷一遍字符串,能得每個字符出現(xiàn)的次數(shù),然后從結(jié)果中找到次數(shù)為1的字符,不就解決問題了嗎?關(guān)鍵在于使用什么結(jié)構(gòu)存儲,很容易想到python中dict,key為字符,value為出現(xiàn)的次數(shù)。但是這里我用list,key是list的索引,正好對應(yīng)字符的ASCII值,value是該字符出現(xiàn)的次數(shù)。由于沒有嵌套for循環(huán),所以時間復(fù)雜度為O(n),我們假定所有字符都是ASCII表中,可以初始化一個大小為256的列表,所以空間復(fù)雜度就是O(1)。
代碼如下:

def first_not_repeating_char(str):
    if not str:
        return None
    arr = [0]*256

    for ch in str:
        arr[ord(ch)] += 1

    for ch in str:
        if arr[ord(ch)] == 1:
            return ch

    return None

print(first_not_repeating_char('aabdbccc'))
#結(jié)果為: d
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,553評論 0 13
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,916評論 0 33
  • All apps provided by this developer,Lin Game Studio, on G...
    Lin_Game_Studio閱讀 811評論 0 0
  • 冰激凌物語 談到冰激凌,不免有些愧疚。想來自己吃了十五個年頭的冰激凌,而叫得出名字的,不過寥寥幾種而已。 第一個便...
    矢北閱讀 1,120評論 2 2

友情鏈接更多精彩內(nèi)容