मैं एक पायथन प्रोग्राम लिखने की कोशिश कर रहा हूं जो एक स्ट्रिंग लेगा और उसमें सबसे लंबा सबस्ट्रिंग प्रिंट करेगा जो वर्णानुक्रम में भी है। उदाहरण के लिए:

The_string = "abcdefgghhisdghlqjwnmonty" यहाँ वर्णानुक्रम में सबसे लंबा विकल्प "abcdefgghhis" होगा

मुझे अपने कार्यों को परिभाषित करने की अनुमति नहीं है और मैं सूचियों का उपयोग नहीं कर सकता। तो यहाँ मैं क्या लेकर आया हूँ:

def in_alphabetical_order(string):
    for letter in range(len(string) - 1):
        if string[letter] > string[letter + 1]:
            return False
    return True    

s = "somestring"
count = 0

for char in range(len(s)):
    i = 0
    while i <= len(s):
        sub_string = s[char : i]
        if (len(sub_string) > count) and (in_alphabetical_order(sub_string)):
            count = len(sub_string)
            longest_string = sub_string
        i += 1

print("Longest substring in alphabetical order is: " + longest_string)

इसमें स्पष्ट रूप से एक ऐसा फ़ंक्शन है जो अंतर्निहित नहीं है। मैं कैसे जांच सकता हूं कि सबस्ट्रिंग उम्मीदवार के तत्व इस फ़ंक्शन को परिभाषित किए बिना वर्णानुक्रम में हैं या नहीं? दूसरे शब्दों में: मैं यह कैसे कार्यान्वित कर सकता हूं कि यह फ़ंक्शन मेरे लिए कोड में क्या करता है (उदाहरण के लिए कोड में कहीं और लूप के लिए दूसरे का उपयोग करके)?

1
user9571453 29 मार्च 2018, 21:43

2 जवाब

सबसे बढ़िया उत्तर

बस अपने कोड से जाकर आप फ़ंक्शन के संचालन को लूप में ले जा सकते हैं और एक वैरिएबल का उपयोग स्टोर करने के लिए कर सकते हैं जो रिटर्न वैल्यू होता।

मैं आपको समस्या को हल करने में मदद करने के लिए छिपकली के बिल को सुनने की सलाह दूंगा

s = "somestring"
count = 0
longest_string = ''


for char in range(len(s)):
    i = 0
    while i <= len(s):
        sub_string = s[char : i]
        in_order = True

        for letter in range(len(sub_string) - 1):
            if sub_string[letter] > sub_string[letter + 1]:
                in_order = False
                break

        if (len(sub_string) > count) and (in_order):
            count = len(sub_string)
            longest_string = sub_string
        i += 1

print("Longest substring in alphabetical order is: " + longest_string)
2
Adam M. 29 मार्च 2018, 18:57

यह देखने के लिए कि क्या यह वर्णानुक्रम में है, आपको फ़ंक्शन कॉल के साथ संपूर्ण सबस्ट्रिंग की जांच करने की आवश्यकता नहीं है। आप एक समय में केवल एक वर्ण की जांच कर सकते हैं।

पहले अक्षर से शुरू करें। यदि अगला वर्ण बाद में वर्णमाला में है, तो स्ट्रिंग में साथ चलते रहें। जब आप किसी ऐसे वर्ण तक पहुँचते हैं जो पिछले वर्ण की तुलना में वर्णमाला में पहले है, तो आपको पहले वर्ण से शुरू होने वाली सबसे लंबी बढ़ती हुई सबस्ट्रिंग मिलती है। इसे सेव करें और दूसरे कैरेक्टर से शुरुआत करें।

हर बार जब आपको वर्ण N से शुरू होने वाला सबसे लंबा सबस्ट्रिंग मिलता है, तो यह देखने के लिए जांचें कि क्या यह पिछले सबसे लंबे सबस्ट्रिंग से लंबा है। यदि ऐसा है, तो पुराने को बदल दें।

1
Bill the Lizard 29 मार्च 2018, 18:54