Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีตรวจสอบว่าความถี่ตัวอักษรในสตริงหนึ่งเป็นตัวคูณหรือตัวหารของอีกสตริงใน Python

ปัญหา

กำหนดสตริง s และ t ตรวจสอบว่าสำหรับทุกตัวอักษรใน s ความถี่ใน s เป็นตัวคูณหรือตัวหารของความถี่ใน t (เฉพาะตัวอักษรที่มีในทั้งคู่)

ตัวอย่าง: s="xxyzzw", t="yyyxxxxzz" → x:2 vs 4 (2|4), y:1 vs 3 (1|3), z:2 vs 2, w:1 vs 0 (ข้าม) → True

แนวทางแก้ปัญหา

  1. นับความถี่ใน s และ t (s_freq, t_freq)
  2. ลูปตัวอักษรใน s_freq ถ้ามีใน t_freq ตรวจสอบหารลงตัว (mod == 0)

ตัวอย่างโค้ด

from collections import defaultdict

def solve(s, t):
    s_freq = defaultdict(int)
    t_freq = defaultdict(int)
    for ch in s: s_freq[ch] += 1
    for ch in t: t_freq[ch] += 1
    for ch in s_freq:
        if ch not in t_freq:
            continue
        if t_freq[ch] % s_freq[ch] == 0 or s_freq[ch] % t_freq[ch] == 0:
            continue
        else:
            return False
    return True

s = "xxyzzw"
t = "yyyxxxxzz"
print(solve(s, t))  # True

อินพุต / เอาต์พุต

Input: "xxyzzw", "yyyxxxxzz"
Output: True