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

पायथन में जांचें कि क्या स्ट्रिंग को अवरोही क्रमागत मानों में विभाजित किया जा सकता है


मान लीजिए हमारे पास केवल संख्याओं वाली एक स्ट्रिंग s है। हमें जांचना है कि क्या हम s को दो या अधिक नॉन-एम्प्टी सबस्ट्रिंग में विभाजित कर सकते हैं ताकि उन सबस्ट्रिंग के संख्यात्मक मान गैर-बढ़ते क्रम में हों और हर दो आसन्न सबस्ट्रिंग के संख्यात्मक मानों का अंतर 1 हो। उदाहरण के लिए, यदि स्ट्रिंग s = "0080079" है तो हम इसे ["0080", "079"] में विभाजित कर सकते हैं जिसके संख्यात्मक मान [80, 79] होंगे। और मान अवरोही क्रम में हैं और आसन्न मानों का अंतर 1 है, तो यह तरीका वैध है। हमें जांचना है कि क्या s को उपरोक्त तरीके से विभाजित करना संभव है या नहीं।

उदाहरण के लिए, यदि इनपुट है s = "080076", तो आउटपुट True होगा क्योंकि हम इसे ["08", "007", "6"] की तरह विभाजित कर सकते हैं, तो संख्यात्मक मान हैं [8,7,6]।

समाधान दृष्टिकोण

इस समस्या को हल करने के लिए हम निम्न चरणों का पालन करेंगे:

  • एक फंक्शन dfs() परिभाषित करें जो s, pre, idx, n लेता है

  • यदि pre -1 नहीं है और s[idx से अंत तक] का पूर्णांक मान pre-1 के बराबर है, तो True लौटाएं

  • i के लिए 1 से n-idx-1 तक लूप चलाएं

    • curs := s[idx से idx+i-1 तक] का सबस्ट्रिंग

    • cur := curs को संख्या के रूप में

    • यदि pre, -1 के बराबर है, तो

      • यदि dfs(s, cur, idx+i, n) सत्य है, तो True लौटाएं

    • अन्यथा,

      • यदि cur, pre-1 के बराबर है और dfs(s, cur, idx+i, n) सत्य है, तो True लौटाएं

  • False लौटाएं

  • मुख्य विधि से, निम्न करें

  • n := s का आकार

  • यदि n <= 1, तो False लौटाएं

  • dfs(s, -1, 0, n) लौटाएं

उदाहरण

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

def dfs(s, pre, idx, n):
    if pre != -1 and int(s[idx:]) == pre - 1:
        return True
    for i in range(1, n-idx):
        curs = s[idx: idx+i]
        cur = int(curs)
        if pre == -1:
            if dfs(s, cur, idx+i, n):
                return True
        else:
            if cur == pre - 1 and dfs(s, cur, idx+i, n):
                return True
    return False

def solve(s):
    n = len(s)
    if n <= 1:
        return False
    return dfs(s, -1, 0, n)

s = "080076"
print(solve(s))

इनपुट

"080076"

आउटपुट

True
  1. - पायथन में दिए गए स्ट्रिंग कैरेक्टर से k पैलिंड्रोम बना सकते हैं या नहीं जांचने का प्रोग्राम

    मान लीजिए हमारे पास एक स्ट्रिंग s और एक अन्य संख्या k है, हमें जांचना है कि क्या हम s में सभी कैरेक्टर का उपयोग करके k पैलिंड्रोम बना सकते हैं या नहीं। उदाहरण के लिए, यदि इनपुट है s = amledavmel k = 2, तो आउटपुट True होगा, क्योंकि हम level और madam बना सकते हैं। इसे हल करने के लिए, हम निम्न चरणों क

  1. - पायथन में जांचें कि क्या एक स्ट्रिंग को दूसरी स्ट्रिंग में 1-टू-1 मैप किया जा सकता है

    मान लीजिए हमारे पास दो लोअरकेस स्ट्रिंग्स s और t हैं, हमें जांचना है कि क्या हम s के प्रत्येक अक्षर के लिए दूसरे अक्षर (शायद वही अक्षर) में 1-टू-1 मैपिंग बना सकते हैं ताकि s को t में मैप किया जा सके। (वर्णों का क्रम नहीं बदलेगा)। उदाहरण के लिए, यदि इनपुट है s = papa, t = lili, तो आउटपुट होगा True,

  1. - पायथन प्रोग्राम: चेक करना कि दी गई स्ट्रिंग हेटेरोग्राम है या नहीं

    यहां एक स्ट्रिंग दी गई है फिर हमारा कार्य चेक करना है कि दी गई स्ट्रिंग हेटेरोग्राम है या नहीं।हेटेरोग्राम चेक करने का अर्थ है कि एक शब्द, वाक्यांश, या वाक्य जिसमें अल्फाबेट का कोई भी अक्षर एक से अधिक बार नहीं आता। हेटेरोग्राम को पैंग्राम से अलग किया जा सकता है जो अल्फाबेट के सभी अक्षरों का उपयोग कर