2186-使两字符串互为字母异位词的最少步骤数

Raphael Liu Lv10

给你两个字符串 st 。在一步操作中,你可以给 s 或者 t 追加 任一字符

返回使 st 互为 字母异位词 所需的最少步骤数

字母异位词 指字母相同但是顺序不同(或者相同)的字符串。

示例 1:

**输入:** s = " _ **lee** t_co _ **de**_ ", t = "co _ **a**_ t _ **s**_ "
**输出:** 7
**解释:**
- 执行 2 步操作,将 "as" 追加到 s = "leetcode" 中,得到 s = "leetcode _ **as**_ " 。
- 执行 5 步操作,将 "leede" 追加到 t = "coats" 中,得到 t = "coats _ **leede**_ " 。
"leetcodeas" 和 "coatsleede" 互为字母异位词。
总共用去 2 + 5 = 7 步。
可以证明,无法用少于 7 步操作使这两个字符串互为字母异位词。

示例 2:

**输入:** s = "night", t = "thing"
**输出:** 0
**解释:** 给出的字符串已经互为字母异位词。因此,不需要任何进一步操作。

提示:

  • 1 <= s.length, t.length <= 2 * 105
  • st 由小写英文字符组成

方法:模拟

思路及算法
考虑模拟:
1.用数组 cnts 保存两个字符串的字母差值
2.统计差值之和,用绝对值即可,不用考虑谁多谁少的问题

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public int minSteps(String s, String t) {
int[] cnts = new int[26];
for (char c : s.toCharArray()) {
cnts[c - 'a']++;
}
for (char c : t.toCharArray()) {
cnts[c - 'a']--;
}
int res = 0;
for (int i : cnts) res += Math.abs(i);
return res;
}
}

复杂度分析

  • 时间复杂度:O(n), n 为max(s.length, t.length)
  • 空间复杂度:O(C), C 为26

结语
如果对您有帮助,欢迎点赞、收藏、关注 沪里户外,让更多的小伙伴看到,祝大家offer多多,AC多多

 Comments
On this page
2186-使两字符串互为字母异位词的最少步骤数