题目描述:
给你两个长度相等的字符串 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:
主要思路:解题汇总链接
(1)统计两个字符串的字符的分布差异;
(2)差异的数量加一除以2就是要改变的最小的步骤;
class Solution {
public:
int minSteps(string s, string t) {
vector<int> counts(26,0);
//统计差异
for(char&ch:s){
++counts[ch-'a'];
}
for(char&ch:t){
--counts[ch-'a'];
}
int res=0;
for(int&i:counts){//计算总的差异值
res+=abs(i);
}
return (res+1)/2;//返回最小的改变
}
};
本文探讨了如何使用统计方法解决字符串s和t之间的字母异位词问题,通过计算字符差异并最小化替换次数,提供了一种高效的算法实现。实例展示了如何应用此方法来找到使t成为s字母异位词的最少步骤。
1680

被折叠的 条评论
为什么被折叠?



