Problem:


String Conversion

Problem

ジェニファーとマリアンはカーラに文字列Sをプレゼントしました。

しかし、カーラは文字列Sをもらっても嬉しくありません。

文字列Tが欲しかったのです。

3人は協力して文字列Sを文字列Tに変えることにしました。

最初にジェニファーが文字を任意の順番に並び替えます。

次にマリアンが２種類のアルファベットの小文字を交換することを任意の回数行います。

この操作では、例えば以下のように、文字列中の同じ文字が全て交換されます。

aab &rarr; aとbを交換 &rarr; bba

aab &rarr; aとcを交換 &rarr; ccb

最後にカーラがある1文字を別の1文字に置換することをTになるまで繰り返します。

ジェニファーとマリアンはカーラの置換回数が少なくなるようにしてあげることにしました。

カーラが行う置換の回数の最小値を求めてください。

Input

n
S
T

1行目に文字列の長さnが与えられる。

2行目に文字列S、3行目に文字列Tが与えられる。

Constraints

1 ≤ n ≤ 105

S,Tは'a'~'z'のみを含む

|S| = |T| = n

Output

カーラの最少の置換回数を1行に出力せよ。

Sample Input 1

3
abc
xyz

Sample Output 1

0

Sample Input 2

5
aaabb
xyxyz

Sample Output 2

1



Sample input:
3
abc
xyz


Sample output:
0

Submission status: Wrong Answer

Solution code:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from collections import defaultdict

N = int(input())
s1 = input()
s2 = input()

chars1 = list(map(ord, s1))
chars2 = list(map(ord, s2))

hist1 = defaultdict(int)
hist2 = defaultdict(int)

for ch in chars1:
    hist1[ch] += 1
for ch in chars2:
    hist2[ch] += 1

appears1 = list(hist1.values())
appears2 = list(hist2.values())

ans = 0
for i, j in zip(appears1, appears2):
    ans +=  abs(i - j)

longer = max(len(appears1), len(appears2))
ans += sum(appears1[longer:]) + sum(appears2[longer:]) 

print(ans)

Submission status: Wrong Answer

Solution code:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from collections import defaultdict

N = int(input())
s1 = input()
s2 = input()

chars1 = list(map(ord, s1))
chars2 = list(map(ord, s2))

hist1 = defaultdict(int)
hist2 = defaultdict(int)

for ch in chars1:
    hist1[ch] += 1
for ch in chars2:
    hist2[ch] += 1

appears1 = list(hist1.values())
appears2 = list(hist2.values())

ans = 0
for i, j in zip(appears1, appears2):
    ans +=  abs(i - j)

longer = min(len(appears1), len(appears2))
ans += sum(appears1[longer:]) + sum(appears2[longer:])

print(ans//2)

Submission status: Accepted

Solution code:
# AOJ 1568: String Conversion
# Python3 2018.7.13 bal4u

cha, chzn = ord('a'), ord('z')+1
S, T = [0]*128, [0]*128
input()
a = input()
for x in a: S[ord(x)] += 1
S = sorted(S[cha:chzn], reverse=True)
a = input()
for x in a: T[ord(x)] += 1
T = sorted(T[cha:chzn], reverse=True)
ans = 0
for i in range(26): ans += abs(S[i]-T[i])
print(ans >> 1)

Submission status: Accepted

Solution code:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from collections import defaultdict

N = int(input())
s1 = input()
s2 = input()

def make_appears(s):
    chars = list(map(ord, s))
    hist = defaultdict(int)
    for ch in chars:
        hist[ch] += 1
    appears = list(hist.values())
    appears.sort()
    appears.reverse()
    return appears
    
appears1 = make_appears(s1)
appears2 = make_appears(s2)

ans = 0
for i, j in zip(appears1, appears2):
    ans += abs(i - j)

shorter = min(len(appears1), len(appears2))
ans += sum(appears1[shorter:]) + sum(appears2[shorter:])

print(ans//2)

Submission status: Accepted

Solution code:
from collections import Counter
n = int(input())
counter1 = Counter(input())
counter2 = Counter(input())
values1 = [0] * (26 - len(counter1)) + sorted(counter1.values())
values2 = [0] * (26 - len(counter2)) + sorted(counter2.values())
print(sum([abs(i - j) for i, j in zip(values1, values2)]) // 2)