สมมติว่าเรามีรายการสตริงที่เรียกว่าคำและสตริงอื่นที่เรียกว่าตัวอักษร เราต้องค้นหาความยาวของสตริงที่ยาวที่สุดในคำที่สามารถสร้างจากอักขระในตัวอักษรได้ หากไม่สามารถสร้างคำได้ ให้คืนค่า 0 เราไม่สามารถใช้ตัวอักษรซ้ำได้
ดังนั้นหากอินพุตเป็นคำ =["dog", "cat", "rat", "bunny", "lion", "bat"], ตัวอักษร ="gabctnyu" ผลลัพธ์จะเป็น 3 ตามที่เรา สามารถสร้างคำว่า "cat" หรือ "bat" ได้ ดังนั้นความยาวสูงสุดคือ 3
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ref :=แผนที่ที่มีตัวอักษรและความถี่
- สูงสุด :=0
- สำหรับแต่ละคำในคำ ทำ
- w :=แผนที่ที่มีตัวอักษรของคำและความถี่
- l :=ขนาดของคำ
- ตัวนับ :=0
- สำหรับแต่ละ k ใน w ทำ
- ถ้า w[k] <=ref[k] แล้ว
- เคาน์เตอร์ :=เคาน์เตอร์ + 1
- มิฉะนั้น
- ออกมาจากวงจร
- ถ้า w[k] <=ref[k] แล้ว
- ถ้า l> max และขนาดของ w เท่ากับตัวนับ แล้ว
- สูงสุด :=ล
- ผลตอบแทนสูงสุด
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
from collections import Counter class Solution: def solve(self, words, letters): ref = Counter(letters) max = 0 for word in words : w = Counter(word) l = len(word) counter = 0 for k in w : if w[k] <= ref[k]: counter+=1 pass else : break if l > max and len(w) == counter: max = l return max ob = Solution() words = ["dog", "cat", "rat", "bunny", "lion", "bat"] letters = "gabctnyu" print(ob.solve(words, letters))
อินพุต
["dog", "cat", "rat", "bunny", "lion", "bat"], "gabctnyu"
ผลลัพธ์
3