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

Python में ऑपरेशन लागू करने के बाद लेक्सिकोग्राफिकली सबसे छोटी स्ट्रिंग खोजने का प्रोग्राम


मान लीजिए हमारे पास केवल संख्यात्मक अंकों वाली एक स्ट्रिंग s है और दो मान a और b भी हैं। हम s पर निम्नलिखित दो ऑपरेशन्स में से किसी एक को किसी भी क्रम में कितनी भी बार लागू कर सकते हैं:

  • s के सभी विषम पोजीशन वाले आइटम्स (0-इंडेक्स्ड) में 'a' जोड़ें। यदि अंक 9 है, तो इसमें कुछ जोड़ने पर यह वापस 0 पर साइकिल हो जाएगा।
  • 's' को b पोजीशन से दाएं घुमाएं।

तो हमें s पर उपरोक्त ऑपरेशन्स को कितनी भी बार लागू करके मिलने वाली लेक्सिकोग्राफिकली सबसे छोटी स्ट्रिंग ढूंढनी है।

उदाहरण के लिए, यदि इनपुट है s = "5323", a = 9, b = 2, तो आउटपुट 2050 होगा क्योंकि यदि हम अनुसरण करते हैं:

  • घुमाएं: "5323"
  • जोड़ें: "5222"
  • जोड़ें: "5121"
  • घुमाएं: "2151"
  • जोड़ें: "2050"

समाधान के चरण

  1. seen := set()
  2. deq := deque([s]) (एक एलिमेंट s वाली क्यू)
  3. while deq:
    • curr := deq.popleft()
    • seen.add(curr)
    • ad := curr पर दिया गया जोड़ ऑपरेशन करें
    • यदि ad not in seen:
      • deq.append(ad)
      • seen.add(ad)
    • ro := curr पर घुमाव ऑपरेशन करें
    • यदि ro not in seen:
      • deq.append(ro)
      • seen.add(ro)
  4. min(seen) वापस करें

उदाहरण

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

from collections import deque

def add_(s, a):
    res = ''
    for idx, i in enumerate(s):
        if idx % 2 == 1:
            num = (int(i) + a) % 10
            res += str(num)
        else:
            res += i
    return res

def rotate_(s, b):
    idx = len(s) - b
    res = s[idx:] + s[0:idx]
    return res

def solve(s, a, b):
    seen = set()
    deq = deque([s])
    while deq:
        curr = deq.popleft()
        seen.add(curr)
        ad = add_(curr, a)
        if ad not in seen:
            deq.append(ad)
            seen.add(ad)
        ro = rotate_(curr, b)
        if ro not in seen:
            deq.append(ro)
            seen.add(ro)
    return min(seen)

s = "5323"
a = 9
b = 2
print(solve(s, a, b))

इनपुट

"5323", 9, 2

आउटपुट

2050
  1. - पायथन में दी गई शर्त को पूरा करने वाली लेक्सिकोग्राफिकली सबसे छोटी स्ट्रिंग खोजें

    मान लीजिए हमारे पास n संख्याओं का एक ऐरे A है, जहां A[i] एक स्ट्रिंग s के लंबाई (i+1) के प्रीफिक्स में विशिष्ट वर्णों की संख्या दर्शाता है, हमें लेक्सिकोग्राफिकली सबसे छोटी स्ट्रिंग ढूंढनी है जो दिए गए प्रीफिक्स ऐरे को संतुष्ट करती है। सभी वर्ण लोअरकेस अंग्रेजी वर्णमाला [a-z] होंगे। यदि ऐसी कोई स्ट्

  1. - पायथन प्रोग्राम: 2D ऐरे में k-वां सबसे छोटा एलिमेंट खोजना

    एक n×n यूजर इनपुट इंटीजर मैट्रिक्स दिया गया है और k का मान। हमारा कार्य 2D ऐरे में k-वां सबसे छोटा एलिमेंट ढूंढना है। यहां हम heapq मॉड्यूल का उपयोग करते हैं। पायथन में हीप क्यू (या heapq) उपलब्ध है। इस मॉड्यूल की तकनीक यह है कि हर बार हीप एलिमेंट का सबसे छोटा पॉप किया जाता है (मिन हीप)। nsmallest()

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

    एक यूजर इनपुट स्ट्रिंग और पोजिशन दी गई है, उस पोजिशन से हमें स्ट्रिंग की लंबाई तक अल्फाबेटिकल ऑर्डर में कैरेक्टर्स को मिरर करना है। इस ऑपरेशन में, हम a को z में, b को y में, c को x में, d को w में बदलते हैं और इसी तरह, यानी पहला कैरेक्टर लास्ट बन जाता है और इसी तरह।Input: p = 3 Input string = python