ได้รับสตริง s, t ตัวพิมพ์เล็ก ใน 1 การดำเนินการ เปลี่ยนตัวอักษรใน s หรือ t ได้เป็นตัวพิมพ์เล็กใดๆ ต้องทำให้ผ่านเงื่อนไข 1 ใน 3:
- ทุกตัวใน
sน้อยกว่าทุกตัวในtอย่างเคร่งครัด - ทุกตัวใน
tน้อยกว่าทุกตัวในsอย่างเคร่งครัด - ทั้ง
sและtมีตัวอักษรชนิดเดียวเท่านั้น
หาจำนวนการดำเนินการน้อยที่สุด
ตัวอย่าง: s="sts", t="uss" ผลลัพธ์ 2
วิธีแก้ปัญหา
- นับความถี่ตัวอักษรใน
s, t - วนตัวอักษร
a..zคำนวณสะสม:unique: เปลี่ยนทั้งคู่ให้เป็นตัวอักษรเดียวกันless_s: เปลี่ยนsให้ทุกตัว >tless_t: เปลี่ยนtให้ทุกตัว >s
- คืนค่า min ของทั้งสาม
ตัวอย่างโค้ด
from collections import Counter
import string
def solve(s, t):
counter_s = Counter(s)
counter_t = Counter(t)
less_s, less_t, unique = float('inf'), float('inf'), float('inf')
accu_s, accu_t = 0, 0
for c in string.ascii_lowercase:
unique = min(unique, len(s)+len(t)-counter_s[c]-counter_t[c])
if c > 'a':
less_s = min(less_s, len(s)-accu_s+accu_t)
less_t = min(less_t, len(t)-accu_t+accu_s)
accu_s += counter_s[c]
accu_t += counter_t[c]
return min(less_s, less_t, unique)
s = "sts"
t = "uss"
print(solve(s, t))
อินพุต
"sts", "uss"
เอาต์พุต
2