2186 使兩字符串互為字母異位詞的最少步驟數(shù)

方法一:哈希 + 成員判斷【集合】
分別對(duì)兩個(gè)字符串做詞頻統(tǒng)計(jì),若字符在任意一個(gè)字符串出現(xiàn),則累加其詞頻,如果同時(shí)在兩個(gè)字符串中出現(xiàn),則累加其差值。
Python版本
C++版本
復(fù)雜度分析
時(shí)間復(fù)雜度:O(N)。 性能開(kāi)銷(xiāo)主要集中在遍歷 s 串 和 t 串統(tǒng)計(jì)詞頻中,最壞情況為兩個(gè)串的長(zhǎng)度之和 2 * 2 * 10 ^ 5, 兩次遍歷詞頻數(shù)組,累計(jì)復(fù)雜度為52,總復(fù)雜度為O(N)。
空間復(fù)雜度:O(C)。額外占用兩個(gè)哈希數(shù)組,英文小寫(xiě)字母26個(gè),合計(jì)52的復(fù)雜度。
方法二:字符數(shù)組 + 成員判斷
用字符數(shù)組,即下標(biāo)為字母的 ASCⅡ碼,值為詞頻統(tǒng)計(jì)兩個(gè)字符串,遍歷26個(gè)字母,分別統(tǒng)計(jì)只在一個(gè)字符串的詞頻,累加其詞頻,統(tǒng)計(jì)同時(shí)在兩個(gè)字符串的字母的詞頻,累加其差值;
Python版本
C++版本
復(fù)雜度分析
時(shí)間復(fù)雜度:O(N)。 性能開(kāi)銷(xiāo)主要集中在遍歷 s 串 和 t 串統(tǒng)計(jì)詞頻中,最壞情況為兩個(gè)串的長(zhǎng)度之和
2 * 2 * 10 ^ 5
, 一次遍歷詞頻數(shù)組,累計(jì)復(fù)雜度為26,總復(fù)雜度為O(N)。空間復(fù)雜度:O(C)。額外占用兩個(gè)哈希數(shù)組,英文小寫(xiě)字母26個(gè),合計(jì)52的復(fù)雜度。
備注
方法二的優(yōu)點(diǎn)在于快速判斷集合關(guān)系,不需要使用函數(shù)做成員判斷,且只需要一層形式上的for循環(huán)。
main.find(other)==main.end()