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

पायथन में सबस्ट्रिंग से पालिंड्रोम बना सकते हैं


मान लीजिए कि हमारे पास एक स्ट्रिंग s है, हमें s के सबस्ट्रिंग्स पर क्वेरी करनी है। प्रत्येक क्वेरी क्वेरी [i] के लिए, तीन भाग होते हैं [बाएं, दाएं, के], हम सबस्ट्रिंग एस [बाएं], ..., एस [दाएं] को पुनर्व्यवस्थित कर सकते हैं, और फिर उनमें से k को बदलने के लिए चुन सकते हैं कोई भी लोअरकेस अंग्रेजी अक्षर। यदि उपरोक्त वर्णित संचालन के बाद सबस्ट्रिंग एक पैलिंड्रोम होना संभव है, तो क्वेरी का परिणाम सत्य है। अन्यथा झूठा। हमें एक सरणी उत्तर [] खोजना है, जहां उत्तर [i] i-th क्वेरी क्वेरी [i] का परिणाम है।

उदाहरण के लिए, यदि इनपुट "abcda" है, तो क्वेरी [[3,3,0], [1,2,0], [0,3,1], [0,3,2], [0, 4,1]], तो आउटपुट [सत्य, झूठा, झूठा, सत्य, सत्य] होगा

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

  • हल नामक एक विधि को परिभाषित करें, यह डीपी मैट्रिक्स, और q लेगा। यह नीचे की तरह काम करेगा -
  • l :=q[0], r :=q[1], k :=q[2], फिर l और r को 1 से बढ़ाएं:=0
  • मैं के लिए 0 से 25 की सीमा में
    • एक :=एक + (dp[r, i] – dp[l – 1, i]) mod 2
  • सही लौटें, जब एक / 2 का पूर्णांक विभाजन <=k, अन्यथा गलत
  • मेकडीपी () नामक एक अन्य विधि को परिभाषित करें, यह डीपी मैट्रिक्स और एस लेगा, यह नीचे की तरह काम करेगा -
  • मैं के लिए 0 से लंबाई की सीमा में
    • जे के लिए 0 से 25 की सीमा में
      • dp[i, j] :=dp[i – 1, j]
    • dp[i, s का ASCII [i] - 'a' का ASCII] 1 तक बढ़ाएं
  • मुख्य विधि इस प्रकार होगी -
  • n :=स्ट्रिंग का आकार s, s :=“ ” संयोजित s
  • dp :=क्रम का एक मैट्रिक्स (n + 1) x 26, और इसे 0 से भरें
  • मेकडीपी (डीपी, एस) पर कॉल करें
  • res :=q की लंबाई के समान आकार की एक सरणी, और इसे असत्य से भरें
  • i के लिए 0 से q - 1 की लंबाई के बीच
    • res[i] :=solve(dp, q[i])
  • रिटर्न रेस

उदाहरण (पायथन)

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

class Solution(object):
   def solve(self,dp,q):
      l = q[0]
      r = q[1]
      k = q[2]
      r+=1
      l+=1
      #arr = [ 0 for i in range(26)]
      one = 0
      for i in range(26):
         one += (dp[r][i]-dp[l-1][i])%2
      return one//2<=k
   def make_dp(self,dp,s):
      for i in range(1,len(s)):
         for j in range(26):
            dp[i][j] = dp[i-1][j]
         dp[i][ord(s[i])-ord('a')]+=1
   def canMakePaliQueries(self, s, q):
      n = len(s)
      s = " "+s
      dp = [[0 for i in range(26)] for j in range(n+1)]
      self.make_dp(dp,s)
      res = [False for i in range(len(q))]
      for i in range(len(q)):
         res[i] = self.solve(dp,q[i])
      return res
ob = Solution()
print(ob.canMakePaliQueries("abcda", [[3,3,0],[1,2,0],[0,3,1],[0,3,2],[0,4,1]]))

इनपुट

"abcda"
[[3,3,0],[1,2,0],[0,3,1],[0,3,2],[0,4,1]]

आउटपुट

[True, False, False, True, True]

  1. हम पायथन फ़ंक्शन से टपल कैसे वापस कर सकते हैं?

    हम कई तरीकों से एक पायथन फ़ंक्शन से एक टपल वापस कर सकते हैं। दिए गए टपल के लिए, हम नीचे दिखाए अनुसार एक फ़ंक्शन को परिभाषित करते हैं। उदाहरण def foo():     str = "tutorialspoint"     x   = 30     return (str, x);            

  1. हम पायथन फ़ंक्शन से एक शब्दकोश कैसे वापस कर सकते हैं?

    पाइथन फंक्शन से डिक्शनरी को वापस करने के कई तरीके हो सकते हैं। नीचे दिए गए पर विचार करें। उदाहरण # This function returns a dictionary def foo():      d = dict();      d['str'] = "Tutorialspoint"      d['x']   = 50   &nb

  1. हम MATLAB से पायथन फ़ंक्शन को कैसे कॉल कर सकते हैं?

    पायथन पुस्तकालय अब MATLAB (2014b से) में उपलब्ध हैं। यदि हम संस्करण 2014b या बाद के संस्करण का उपयोग कर रहे हैं तो हम सीधे MATLAB में कोड चला सकते हैं। यह MATLAB में पायथन मॉड्यूल का उपयोग करना संभव बनाता है। किसी अन्य परिवर्तन के बिना, आप जिस पायथन लाइब्रेरी नाम का उपयोग करना चाहते हैं, उसके पहले