题目地址:
https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/
给定两个字符串 s s s和 t t t,允许将其中一个字符串的任意位置改为另一个字符。问如果需要让两个字符串变得相等,至少要进行多少次操作。题目保证 s s s与 t t t长度相等,并且只含英文小写字母。
如果 s s s里某个字母比 t t t多 k k k个,可以想见这 k k k个字母是必须得变的,而它们要变成的,应该是 s s s里比 t t t数量少的那些字母。所以可以想见答案就是所有 s s s中比 t t t多的字母个数。算法的正确性可以这样想,因为两个字符串长度相等,所以 s s s中比 t t t多的字母个数总和应当等于 s s s中比 t t t少的字母个数总和。显然操作次数不能小于所有 s s s中比 t t t多的字母个数加总,而这个操作次数是可以达到的,只需要将多的字母变成少的即可。代码如下:
public class Solution {
public int minSteps(String s, String t) {
int[] count = new int[26];
for (int i = 0; i < s.length(); i++) {
count[s.charAt(i) - 'a']++;
count[t.charAt(i) - 'a']--;
}
int res = 0;
for (int i = 0; i < 26; i++) {
res += Math.max(0, count[i]);
}
return res;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。