Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में स्ट्रिंग का nth लेक्सिकोग्राफिक क्रमपरिवर्तन ढूंढना


मान लीजिए हमारे पास एक स्ट्रिंग है जिसकी लंबाई m है, और यह स्ट्रिंग केवल लोअरकेस अक्षरों को समाहित करती है, हमें स्ट्रिंग का nth क्रमपरिवर्तन लेक्सिकोग्राफिक रूप से ढूंढना है।

तो, यदि इनपुट स्ट्रिंग = "pqr", n = 3 की तरह है, तो आउटपुट "qpr" होगा क्योंकि सभी क्रमपरिवर्तन [pqr, prq, qpr, qrp, rpq, rqp] हैं, वे क्रमबद्ध क्रम में हैं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • MAX_CHAR := 26

  • MAX_FACT := 20

  • factorials := MAX_FACT आकार की एक सरणी

  • factorials[0] := 1

  • i के लिए 1 से MAX_FACT की सीमा में, करें

    • factorials[i] := factorials[i - 1] * i

  • size := स्ट्रिंग का आकार

  • occurrence := MAX_CHAR आकार की एक सरणी, 0 से भरें

  • i के लिए 0 से size की सीमा में, करें

    • occurrence[ASCII of (string[i]) - ASCII of ('a')] := occurrence[ASCII of (string[i]) - ASCII of ('a')] + 1

  • res := MAX_CHAR आकार की एक सरणी

  • Sum := 0, k := 0

  • जब तक Sum, n के समान नहीं है, करें

    • Sum := 0

    • i के लिए 0 से MAX_CHAR की सीमा में, करें

      • यदि occurrence[i], 0 के समान है, तो

        • अगले पुनरावृत्ति के लिए जाएं

      • occurrence[i] := occurrence[i] - 1

      • temp_sum := factorials[size - 1 - k]

      • j के लिए 0 से MAX_CHAR की सीमा में, करें

        • temp_sum := temp_sum / factorials[occurrence[j]] (पूर्णांक विभाजन)

      • Sum := Sum + temp_sum

      • यदि Sum >= n, तो

        • res[k] := ASCII कोड (i + ASCII of('a')) से वर्ण

        • n := n - Sum - temp_sum

        • k := k + 1

        • लूप से बाहर निकलें

      • यदि Sum < n, तो

        • occurrence[i] := occurrence[i] + 1

  • i := MAX_CHAR-1

  • जब k < size और i >= 0, करें

    • यदि occurrence[i] शून्येतर है, तो

      • res[k] := ASCII कोड (i + ASCII of('a')) से वर्ण

      • occurrence[i] := occurrence[i] - 1

      • i := i + 1

      • k := k + 1

    • i := i - 1

  • इंडेक्स 0 से (k - 1) तक res से स्ट्रिंग बनाकर लौटाएं

उदाहरण

बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

MAX_CHAR = 26 MAX_FACT = 20 factorials = [None] * (MAX_FACT) def get_nth_permute(string, n):     factorials[0] = 1     for i in range(1, MAX_FACT):         factorials[i] = factorials[i - 1] * i     size = len(string)     occurrence = [0] * (MAX_CHAR)     for i in range(0, size):         occurrence[ord(string[i]) - ord('a')] += 1     res = [None] * (MAX_CHAR)     Sum = 0     k = 0     while Sum != n:         Sum = 0         for i in range(0, MAX_CHAR):             if occurrence[i] == 0:                 continue             occurrence[i] -= 1             temp_sum = factorials[size - 1 - k]             for j in range(0, MAX_CHAR):                 temp_sum = temp_sum // factorials[occurrence[j]]             Sum += temp_sum             if Sum >= n:                 res[k] = chr(i + ord('a'))                 n -= Sum - temp_sum                 k += 1                 break             if Sum < n:                 occurrence[i] += 1     i = MAX_CHAR-1     while k < size and i >= 0:         if occurrence[i]:             res[k] = chr(i + ord('a'))             occurrence[i] -= 1             i += 1             k += 1         i -= 1     return ''.join(res[:k]) n = 3 string = "pqr" print(get_nth_permute(string, n))

इनपुट

"pqr"

आउटपुट

qpr

  1. - पायथन में स्ट्रिंग का लेक्सिकोग्राफिकली सबसे बड़ा पैलिंड्रोमिक सबसीक्वेंस खोजें

    मान लीजिए हमारे पास एक स्ट्रिंग S है; हमें उस स्ट्रिंग का लेक्सिकोग्राफिकली सबसे बड़ा पैलिंड्रोमिक सबसीक्वेंस ढूंढना है।तो, यदि इनपुट tutorialspointtutorial जैसा है, तो आउटपुट uu होगा।इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:ans := खाली स्ट्रिंगmax_val := s[0]i को 1 से s के आकार तक के

  1. - पायथन में नेक्स्ट पर्मुटेशन

    मान लीजिए हम नेक्स्ट पर्मुटेशन विधि को लागू करना चाहते हैं, वह विधि संख्याओं को संख्याओं के लेक्सिकोग्राफिक रूप से अगले बड़े क्रमचय में पुनर्व्यवस्थित करती है। यदि ऐसी व्यवस्था संभव नहीं है, तो यह विधि इसे न्यूनतम संभव क्रम में पुनर्व्यवस्थित करेगी (वह वास्तव में आरोही क्रम में सॉर्ट किया गया है)। प

  1. पायथन प्रोग्राम: दो स्ट्रिंग्स से असामान्य शब्द खोजें पायथन प्रोग्राम: दो स्ट्रिंग्स से असामान्य शब्द खोजें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें दो स्ट्रिंग्स दी गई हैं, हमें दी गई स्ट्रिंग्स से असामान्य शब्द प्राप्त करने हैं। उदाहरण # असामान्य शब्द def find(A, B): # काउंट count = {} # A में डालें for word in A.split(): count[word] = count.get(w