สมมติว่าเรามีกลุ่มหมุนสำหรับสตริงที่เก็บการหมุนทั้งหมดที่ไม่ซ้ำกัน หากอินพุตคือ "567" สามารถหมุนได้เป็น "675" และ "756" ซึ่งทั้งหมดอยู่ในกลุ่มหมุนเดียวกัน ตอนนี้ถ้าเรามีลิสต์ของสตริง words เราต้องจัดกลุ่มแต่ละคำตามกลุ่มหมุนของมัน และหาจำนวนกลุ่มทั้งหมด
ตัวอย่าง
หากอินพุตคือ words = ["xyz", "ab", "ba", "c", "yzx"] ผลลัพธ์จะเป็น 3 เนื่องจากมีสามกลุ่มหมุน: ["xyz", "yzx"], ["ab", "ba"], ["c"]
ขั้นตอนการแก้ปัญหา
s:= เซตใหม่ct:= 0- สำหรับแต่ละ
iในwords:- ถ้า
iไม่อยู่ในsให้ct := ct + 1 - ลูป
jจาก 0 ถึงขนาดของi:temp:= สับสตริงของi[จากดัชนี j ถึงสุดท้าย]ต่อ สับสตริงของi [จากต้นทางถึง j]- เพิ่ม
tempเข้าs
- ถ้า
- คืนค่า
ct
การใช้งาน
class Solution:
def solve(self, words):
s = set()
ct = 0
for i in words:
if i not in s:
ct += 1
for j in range(len(i)):
s.add(i[j:] + i[:j])
return ct
ob = Solution()
print(ob.solve(["xyz", "ab", "ba", "c", "yzx"]))
อินพุต
["xyz", "ab", "ba", "c", "yzx"]
เอาต์พุต
3