สมมติว่าเรามีข้อความและรายการสตริงที่เรียกว่ารูปแบบ เราต้องกำหนดฟังก์ชันที่เป็นตัวหนา โดยที่สตริงย่อยทั้งหมดในข้อความที่ตรงกับสตริงใดๆ ในรูปแบบที่กำหนดจะถูกห่อด้วย และ แท็ก หากรูปแบบใดอยู่ติดกันหรือทับซ้อนกัน ควรรวมเป็นหนึ่งแท็ก
ดังนั้น หากอินพุตเป็น text ="thisissampleline" รูปแบบ =["this", "issam", "sample"] ผลลัพธ์จะเป็น "abcdefg" เนื่องจาก bc และ ef ตรงกับข้อความและถูกรวมไว้ในแท็ก และ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้
-
n :=ขนาดของข้อความ
-
ตัวหนา :=รายการขนาด n และกรอกค่าเท็จ
-
สำหรับผมอยู่ในช่วง 0 ถึง n ทำ
-
สำหรับแต่ละ p ในรูปแบบ ทำ
-
หากสตริงย่อยของข้อความ[จากดัชนี i ถึงจุดสิ้นสุด] เริ่มต้นด้วย p ดังนั้น
-
สำหรับ j ในช่วง 0 ถึงขนาดของ p ให้ทำ
-
ตัวหนา[i + j] :=จริง
-
-
-
-
-
ตอบ :=สตริงว่าง
-
สำหรับผมอยู่ในช่วง 0 ถึง n ทำ
-
ถ้า bold[i] และ (i เหมือนกับ 0 หรือ bold[i - 1] เป็นเท็จ) ดังนั้น
-
ans :=เชื่อม ""
-
-
ans :=ans + text[i]
-
ถ้าตัวหนา[i] และ (i เหมือนกับ n - 1 หรือตัวหนา[i + 1] เป็นเท็จ) ดังนั้น
-
ans :=ans concatenate ""
-
-
-
กลับมาอีกครั้ง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
ตัวอย่าง
class Solution: def solve(self, text, patterns): n = len(text) bold = [False] * n for i in range(n): for p in patterns: if text[i:].startswith(p): for j in range(len(p)): bold[i + j] = True ans = "" for i in range(n): if bold[i] and (i == 0 or not bold[i - 1]): ans += "" ans += text[i] if bold[i] and (i == n - 1 or not bold[i + 1]): ans += "" return ans ob = Solution() text = "thisissampleline" patterns = ["this", "ssam", "sample"] print(ob.solve(text, patterns))
อินพุต
"thisissampleline", ["this", "ssam", "sample"]
ผลลัพธ์
<b>this</b>i<b>ssample</b>line