LeetCode - 1347. Minimum Number of Steps to Make Two Strings Anagram
개요
글자 개수가 같은 두 문자열 s
와 t
가 주어진다.
t
의 문자들을 바꿔 s
의 Anagram
으로 만들어야 한다.
Anagram
: 두 문자열이 주어졌을 때, 구성하는 문자는 같으나 위치만 다른 두 문자열을Anagram
관계에 있다고 한다.
이 때, 문자열 t
가 s
의 Anagram
이 되기 위한 바꿔야 할 최소 문자의 개수를 구하라.
이해한 부분
s 가 Anagram 대상이고, t를 최소한으로 바꾸어 s의 Anagram으로 만들어야 한다.
모호한 부분
Anagram이 순서 상관 있을까? - 순서 상관 없이 character 개수와 종류만 맞으면 되었다.
해결 전략
1. hash Table 비교
s와 t를 각각 구성하는 문자와 문자 개수를 저장하는 hash table를 생성한다.
leetcode = 8자
l = 1, e = 3, t = 1, c = 1, o = 1, d = 1
practice = 8 자
p = 1, r = 1, a = 1, t = 1, i = 1, c = 2, e = 1
l = 1, l = 0, abs(1 - 0), 8 - 1 => 7
e = 3, e = 1, abs(3 - 1), 7 - 2 => 5
t = 1, t = 1, abs(1 - 1), 5 - 0 => 7
c = 1, c = 2, abs(1 - 2), 5 - 1 => 5 (X) 0 이하면 세지말아야 함
o = 1, o = 0, abs(1 - 0), 5 - 0 => 5
d = 1, d = 0, abs(1 - 0), 5 - 0 => 5
즉, 바꿔야 할 문자의 개수는 5개가 나온다.
회고
이번 문제는 정보가 많이 주어졌다.
두 문자열 s
와 t
의 개수가 같다는 점.
목표도 s
를 대상으로 t
를 바꿔 만들 수 있는 Anagram
으로 명확하였다.
또한, s 혹은 t로 바꿔 만들 수 있는 Anagram
의 최소 문자 개수를 구한다고 해도 위의 문제를 응용하여 해결할 수 있을 것 같다. 구조는 아래와 같다.