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

โปรแกรมหาจำนวนกลุ่มหมุนที่แตกต่างกันของลิสต์คำใน Python

สมมติว่าเรามีกลุ่มหมุนสำหรับสตริงที่เก็บการหมุนทั้งหมดที่ไม่ซ้ำกัน หากอินพุตคือ "567" สามารถหมุนได้เป็น "675" และ "756" ซึ่งทั้งหมดอยู่ในกลุ่มหมุนเดียวกัน ตอนนี้ถ้าเรามีลิสต์ของสตริง words เราต้องจัดกลุ่มแต่ละคำตามกลุ่มหมุนของมัน และหาจำนวนกลุ่มทั้งหมด

ตัวอย่าง

หากอินพุตคือ words = ["xyz", "ab", "ba", "c", "yzx"] ผลลัพธ์จะเป็น 3 เนื่องจากมีสามกลุ่มหมุน: ["xyz", "yzx"], ["ab", "ba"], ["c"]

ขั้นตอนการแก้ปัญหา

  1. s := เซตใหม่
  2. ct := 0
  3. สำหรับแต่ละ i ใน words:
    • ถ้า i ไม่อยู่ใน s ให้ ct := ct + 1
    • ลูป j จาก 0 ถึงขนาดของ i:
      • temp := สับสตริงของ i[จากดัชนี j ถึงสุดท้าย] ต่อ สับสตริงของ i [จากต้นทางถึง j]
      • เพิ่ม temp เข้า s
  4. คืนค่า 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