首頁>技術>

題目

給你兩個長度相等的字串 s 和 t。每一個步驟中,你可以選擇將 t 中的 任一字元 替換為 另一個字元。

返回使 t 成為 s 的字母異位詞的最小步驟數。

字母異位詞 指字母相同,但排列不同(也可能相同)的字串。

示例 1:輸出:s = "bab", t = "aba" 輸出:1

提示:用 'b' 替換 t 中的第一個 'a',t = "bba" 是 s 的一個字母異位詞。

示例 2:輸出:s = "leetcode", t = "practice" 輸出:5

提示:用合適的字元替換 t 中的 'p', 'r', 'a', 'i' 和 'c',使 t 變成 s 的字母異位詞。

示例 3:輸出:s = "anagram", t = "mangaar" 輸出:0

提示:"anagram" 和 "mangaar" 本身就是一組字母異位詞。

示例 4:輸出:s = "xxyyzz", t = "xxyyzz" 輸出:0

示例 5:輸出:s = "friend", t = "family" 輸出:4

提示:1 <= s.length <= 50000

s.length == t.length

s 和 t 只包含小寫英文字母

解題思路分析

1、雜湊輔助;時間複雜度O(n),空間複雜度O(n)

func minSteps(s string, t string) int {	res := 0	m := make(map[uint8]int)	for i := 0; i < len(s); i++ {		m[s[i]]++	}	for i := 0; i < len(t); i++ {		if _, ok := m[t[i]]; ok {			m[t[i]]--		} else {			m[t[i]] = -1		}	}	for _, v := range m {		if v > 0 {			res = res + v		}	}	return res}

2、雜湊輔助;時間複雜度O(n),空間複雜度O(n)

func minSteps(s string, t string) int {	res := 0	m := make(map[uint8]int)	for i := 0; i < len(s); i++ {		m[s[i]]++		m[t[i]]--	}	for _, v := range m {		if v > 0 {			res = res + v		}	}	return res}

3、雜湊輔助;時間複雜度O(n),空間複雜度O(n)

func minSteps(s string, t string) int {	res := 0	a := make(map[int]int)	b := make(map[int]int)	for i := 0; i < len(s); i++ {		a[int(s[i]-'a')]++		b[int(t[i]-'a')]++	}	for i := 0; i < 26; i++ {		if a[i] < b[i] {			res = res + b[i] - a[i]		}	}	return res}
總結

Medium題目,統計不一樣的個數即可

5
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 1000字講清楚Keil如何安裝