Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの部分文字列から回文を作成できます


文字列sがあるとすると、sの部分文字列に対してクエリを実行する必要があります。クエリクエリ[i]ごとに、3つの部分[左、右、k]があり、部分文字列s [左]、...、s [右]を再配置して、それらのうち最大k個を選択して置換することができます。小文字の英字。上記の操作の後でサブストリングが回文である可能性がある場合、クエリの結果はtrueです。それ以外の場合はfalse。配列answer[]を見つける必要があります。ここで、answer[i]はi番目のクエリクエリ[i]の結果です。

たとえば、入力が「abcda」の場合、クエリは[[3,3,0]、[1,2,0]、[0,3,1]、[0,3,2]、[0、 4,1]]の場合、出力は[true、false、false、true、true]

になります。

これを解決するには、次の手順に従います-

  • solveと呼ばれるメソッドを定義します。これはdp行列とqを取ります。これは以下のように機能します-
  • l:=q [0]、r:=q [1]、k:=q [2]、次にlとrを1増やし、1:=0
  • 0〜25の範囲のiの場合
    • one:=one +(dp [r、i] – dp [l – 1、i])mod 2
  • 1/2の整数除算の場合はtrueを返します<=k、それ以外の場合はfalse
  • makeDP()と呼ばれる別のメソッドを定義します。これはdp行列とsを取ります。これは、以下のように機能します-
  • 0からsの長さの範囲のiの場合
    • 0〜25の範囲のjの場合
      • dp [i、j]:=dp [i – 1、j]
    • dp [i、s[i]のASCII–「a」のASCII]を1増やします
  • 主な方法は次のようになります-
  • n:=文字列のサイズs、s:=“”連結s
  • dp:=次数(n + 1)x 26の行列で、これを0で埋めます
  • makeDP(dp、s)を呼び出す
  • res:=qの長さと同じサイズの配列で、これをfalseで埋めます
  • 0からq–1の長さの範囲のiの場合
    • res [i]:=resolve(dp、q [i])
  • return res

例(Python)

理解を深めるために、次の実装を見てみましょう-

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. Python関数から辞書を返すにはどうすればよいですか?

    Python関数から辞書を返す方法はいくつもあります。以下に示すものを検討してください。 例 # This function returns a dictionary def foo():      d = dict();      d['str'] = "Tutorialspoint"      d['x']   = 50      return d print foo() 出力 {'x': 50

  2. MATLABからPython関数を呼び出すにはどうすればよいですか?

    PythonライブラリがMATLABで利用できるようになりました(2014b以降)。バージョン2014b以降を使用している場合は、MATLABでコードを直接実行できます。 これにより、MATLABでPythonモジュールを使用できるようになります。他に変更を加えることなく、使用するPythonライブラリ名の前に「py」を付けるだけです。例としてPythonカレンダーモジュールを使用してみましょう。 py.calendar.isleap(2016); py.calendar.isleap(2017); 出力 ans =1 ans = 0 独自の関数を実行するために、現在のMATLAB作業デ