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

Python में कैसे बताएं कि String खुद को Repeat करती है?


String Periodicity Check करना

हम Check करना चाहते हैं कि हमारे पास जो String है वह इस String के Substring की Repetitions से Composed है या नहीं। इसे Check करने के लिए हम Check कर सकते हैं कि String का कोई Rotation 2 Strings के Combination में Exist करता है या नहीं। ऐसा इसलिए क्योंकि एक String Periodic होती है यदि और केवल यदि यह स्वयं के Non-trivial Rotation के बराबर होती है।

उदाहरण

निम्न Code इसे Check करता है और Accordingly Return करता है:

def find_period(s):
    # 2 s को Concatenate करें और s को इसके भीतर Find करें
    # Index 1 से End of String तक
    i = (s + s).find(s, 1, -1)
    return None if i == -1 else s[:i]

print(find_period('012012012012012'))
print(find_period('some random string'))

Output:

012
None

How it Works:

  1. String को स्वयं के साथ Concatenate करें: s + s
  2. Original String s को Concatenated String में Search करें, Index 1 से शुरू करके (Trivial Match at 0 को Avoid करने के लिए)
  3. यदि Index len(s) - 1 से पहले मिलता है, तो String Periodic है
  4. Period Length = Found Index

Alternative Approach (KMP Algorithm):

def find_period_kmp(s):
    """KMP Failure Function का उपयोग करके Period Find करें"""
    n = len(s)
    lps = [0] * n  # Longest Prefix Suffix
    
    # LPS Array Build करें
    length = 0
    i = 1
    while i < n:
        if s[i] == s[length]:
            length += 1
            lps[i] = length
            i += 1
        else:
            if length != 0:
                length = lps[length - 1]
            else:
                lps[i] = 0
                i += 1
    
    # Period Check
    period = n - lps[-1]
    if period != n and n % period == 0:
        return s[:period]
    return None

Test Cases:

test_cases = [
    '012012012012012',    # Periodic: '012'
    'abcabcabc',          # Periodic: 'abc'
    'aaaaa',              # Periodic: 'a'
    'ababab',             # Periodic: 'ab'
    'abcdef',             # Not Periodic
    'some random string', # Not Periodic
    '',                   # Empty
    'a',                  # Single Char
]

for case in test_cases:
    result = find_period(case)
    print(f"'{case}' -> {result}")

  1. - पायथन में अपरिवर्तनीय स्ट्रिंग की आईडी कैसे बदलें?

    पायथन में स्ट्रिंग्स अपरिवर्तनीय होती हैं, इसका मतलब है कि एक बार स्ट्रिंग बन जाने के बाद, इसे बदला नहीं जा सकता। जब आप एक स्ट्रिंग बनाते हैं, और यदि आप वही स्ट्रिंग बनाकर दूसरे वेरिएबल को असाइन करते हैं तो वे दोनों उसी स्ट्रिंग/मेमोरी को पॉइंट करेंगे। उदाहरण के लिए, >>> a = hi >>>

  1. - पायथन में मल्टीपल डिलीमीटर्स के साथ स्ट्रिंग को कैसे तोड़ें?

    हम re.split(delimiter, str) मेथड का उपयोग करके मल्टीपल डिलीमीटर्स के साथ स्ट्रिंग को तोड़ सकते हैं। यह डिलीमीटर्स का एक रेगेक्स और वह स्ट्रिंग लेता है जिसे हमें विभाजित करने की आवश्यकता है। उदाहरण के लिए: a=Beautiful, is; better*than\nugly import re print(re.split(; |, |\*|\n, a)) हमें आउटपुट मिलता

  1. - पायथन में स्ट्रिंग को कैसे रिवर्स करें?

    पायथन में स्ट्रिंग को रिवर्स करने के लिए स्ट्रिंग स्लाइसिंग और रेंज ऑपरेटर्स का उपयोग किया जा सकता है। उदाहरण के लिए: >>> Hello[::-1] olleH >>> Halloween[::-1] neewollaH [] ऑपरेटर कोलन : से अलग 3 नंबर ले सकता है। पहला स्टार्ट इंडेक्स है, दूसरा एंड इंडेक्स है और तीसरा स्ट्राइड है। य