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

पायथन में दिए गए स्ट्रिंग में k अद्वितीय वर्णों के साथ सबसे लंबा विकल्प खोजें


मान लीजिए कि हमारे पास एक स्ट्रिंग है जो हमें सबसे लंबे संभव सबस्ट्रिंग को वापस करना है जिसमें अद्वितीय वर्णों की संख्या k है, यदि सबसे लंबी संभव लंबाई के एक से अधिक सबस्ट्रिंग हैं, तो उनमें से किसी को वापस कर दें।

इसलिए, यदि इनपुट s ="ppqprqtqtqt", k =3 जैसा है, तो आउटपुट rqtqtqt होगा क्योंकि इसकी लंबाई 7 है।

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

  • एन:=26

  • एक फ़ंक्शन परिभाषित करें is_ok() । यह गिनती लेगा, k

  • वैल:=0

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

    • अगर गिनती [i]> 0, तो

      • वैल:=वैल + 1

  • सही लौटें जब (k>=वैल)

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

  • अद्वितीय :=0, आकार :=s का आकार

  • गिनती :=आकार N की एक सरणी, 0 से भरें

  • मेरे लिए 0 से आकार की सीमा में, ऐसा करें

    • यदि s[i] की संख्या 0 के समान है, तो

      • अद्वितीय:=अद्वितीय + 1

    • s[i] की संख्या को 1 से बढ़ाएं

  • अगर अद्वितीय

    • ऐसा कोई वर्ण और निकास नहीं है

  • प्रारंभ:=0, अंत:=0

  • window_length :=1, window_start :=0

  • गिनती :=आकार N की एक सरणी, 0 से भरें

  • s[0] की संख्या में 1 तक वृद्धि करें

  • 1 से आकार के बीच के लिए, करें

    • s[i] की संख्या को 1 से बढ़ाएं

    • अंत:=अंत + 1

    • जबकि is_ok(गिनती, k) गलत है, करें

      • s[i] की संख्या को 1 से कम करें

      • प्रारंभ:=प्रारंभ + 1

    • अगर एंड-स्टार्ट+1> window_length, तो

      • window_length :=एंड-स्टार्ट+1

      • window_start :=start

  • s का रिटर्न सबस्ट्रिंग [इंडेक्स विंडो_स्टार्ट से विंडो_स्टार्ट + विंडो_लेंथ]

उदाहरण

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

N = 26
def is_ok(count, k):
   val = 0
   for i in range(N):
      if count[i] > 0:
         val += 1
   return (k >= val)
def k_unique_chars(s, k):
   unique = 0
   size = len(s)
   count = [0] * N
   for i in range(size):
      if count[ord(s[i])-ord('a')] == 0:
         unique += 1
      count[ord(s[i])-ord('a')] += 1
   if unique < k:
      return "Not sufficient characters"
   start = 0
   end = 0
   window_length = 1
   window_start = 0
   count = [0] * len(count)
   count[ord(s[0])-ord('a')] += 1
   for i in range(1,size):
      count[ord(s[i])-ord('a')] += 1
      end+=1
      while not is_ok(count, k):
         count[ord(s[start])-ord('a')] -= 1
         start += 1
      if end-start+1 > window_length:
         window_length = end-start+1
         window_start = start
   return s[window_start:window_start + window_length]

s = "ppqprqtqtqt"
k = 3
print(k_unique_chars(s, k))

इनपुट

"ppqprqtqtqt", 3

आउटपुट

rqtqtqt

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

    हमें दो तार दिए गए हैं। हमें पहली स्ट्रिंग में वर्णों की गिनती खोजने की ज़रूरत है जो दूसरी स्ट्रिंग में भी मौजूद हैं। सेट के साथ सेट फ़ंक्शन हमें एक स्ट्रिंग में सभी तत्वों को अद्वितीय मान देता है। हम और ऑपरेटर का भी उपयोग करते हैं जो दो दिए गए स्ट्रिंग्स के बीच सामान्य तत्वों को ढूंढता है। उदाहरण

  1. पायथन रेगेक्स का उपयोग करके किसी दिए गए स्ट्रिंग में "1(0+)1" के सभी पैटर्न खोजें

    इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो regexes का उपयोग करके एक स्ट्रिंग में 1(0+1) की सभी घटनाओं को ढूंढता है। . हमारे पास पायथन में एक री मॉड्यूल है जो हमें रेगुलर एक्सप्रेशन के साथ काम करने में मदद करता है। आइए एक नमूना मामला देखें। Input: string = "Sample 1(0+)1 string with

  1. कैसे अजगर में एक स्ट्रिंग में सबस्ट्रिंग की nth घटना को खोजने के लिए?

    आप अधिकतम n+1 विभाजन के साथ सबस्ट्रिंग पर विभाजित करके एक स्ट्रिंग में एक सबस्ट्रिंग की nth घटना पा सकते हैं। यदि परिणामी सूची का आकार n+1 से बड़ा है, तो इसका मतलब है कि सबस्ट्रिंग n बार से अधिक होता है। इसका सूचकांक एक साधारण सूत्र द्वारा पाया जा सकता है, मूल स्ट्रिंग की लंबाई - अंतिम विभाजित भाग क