สมมติว่าเรามีสตริงตัวพิมพ์เล็ก เราต้องตรวจสอบว่าเราสามารถแยกสตริงออกจากตรงกลางได้หรือไม่ซึ่งจะทำให้สองส่วนมีความแตกต่างกันอย่างน้อยหนึ่งอักขระระหว่างสองด้าน อาจมีอักขระต่างกันหรือความถี่ต่างกันของอักขระแต่ละตัว หากสตริงเป็นสตริงที่มีความยาวคี่ ให้ข้ามองค์ประกอบตรงกลางและตรวจสอบองค์ประกอบที่เหลือ
ดังนั้น หากอินพุตเป็น s ="helloohekk" ผลลัพธ์จะเป็น True เนื่องจาก "helloohekk" ดังนั้นส่วนซ้ายคือ "hello" ส่วนขวาคือ "ohhekk" ซ้ายและขวาต่างกัน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- left_freq :=แผนที่ว่างเปล่า
- right_freq :=แผนที่ว่างเปล่า
- n :=ขนาดของ s
- สำหรับฉันในช่วง 0 ถึงผลหารของ (n/2) - 1 ทำ
- left_freq[s[i]] :=left_freq[s[i]] + 1
- สำหรับฉันอยู่ในช่วงเชาวน์ของ (n/2) ถึง n - 1 ทำ
- right_freq[s[i]] :=right_freq[s[i]] + 1
- สำหรับอักขระแต่ละตัวใน s ทำ
- ถ้า right_freq[char] ไม่เหมือนกับ left_freq[char] แล้ว
- คืนค่า True
- ถ้า right_freq[char] ไม่เหมือนกับ left_freq[char] แล้ว
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
from collections import defaultdict def solve(s): left_freq = defaultdict(int) right_freq = defaultdict(int) n = len(s) for i in range(n//2): left_freq[s[i]] += 1 for i in range(n//2, n): right_freq[s[i]] += 1 for char in s: if right_freq[char] != left_freq[char]: return True return False s = "helloohekk" print(solve(s))
อินพุต
"helloohekk"
ผลลัพธ์
True