題目
給你兩個長度相等的字串 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題目,統計不一樣的個數即可
最新評論