Pythonで部分文字列を削除して最大スコアをカウントするプログラム
文字列sと2つの値xとyがあるとします。与えられた2種類の操作を何度でも実行できます。
-
サブストリング「ab」が存在する場合は、それを削除することでxポイントを獲得できます。
-
サブストリング「ba」が存在する場合は、それを削除することでyポイントを獲得できます。
上記の操作をsに適用した後に獲得できる最大のポイントを見つける必要があります。
したがって、入力がs ="cbbaacdeabb" x =4 y =5の場合、最初の文字列は "cbbaacdeabb"であるため、出力は14になります。次に、 "cbbaacde(ab)b"を削除して4を取得し、文字列は " cbbaacdeb "、次に" cb(ba)acdeb "を削除して5を増やし、現在のスコア4 + 5 =9、文字列は" cbacdeb "になり、もう一度" c(ba)cdeb "を削除して、さらに5を取得します。スコア9+5 =14、文字列は「ccdeb」で、次に削除するものはありません。
これを解決するには、次の手順に従います-
- a:='a'、b:='b'
- ans:=0、a_st:=0、b_st:=0
- y> xの場合、
- aとbを入れ替える
- xとyを入れ替える
- sの各cについて、
- cがaと同じ場合、
- a_st:=a_st + 1
- それ以外の場合、cがbと同じである場合、
- a_stがゼロ以外の場合、
- ans:=ans + x
- a_st:=a_st-1
- それ以外の場合、
- b_st + =1
- a_stがゼロ以外の場合、
- それ以外の場合、
- ans:=ans +y*最小のa_stとb_st
- a_st:=0
- b_st:=0
- cがaと同じ場合、
- return ans +y*最小のa_stとb_st
例
理解を深めるために、次の実装を見てみましょう-
def solve(s, x, y): a = 'a' b = 'b' ans = 0 a_st = 0 b_st = 0 if y > x: a,b = b,a x,y = y,x for c in s: if c == a: a_st += 1 elif c == b: if a_st: ans += x a_st -= 1 else: b_st += 1 else: ans += y * min(a_st, b_st) a_st = 0 b_st = 0 return ans + y * min(a_st, b_st) s = "cbbaacdeabb" x = 4 y = 5 print(solve(s, x, y))
入力
"cbbaacdeabb", 4, 5
出力
14
-
文字列からn番目の文字を削除するためのPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 −文字列が与えられたので、与えられた文字列からi番目のインデックス付き文字を削除して表示する必要があります。 Pythonのどの文字列でも、インデックス付けは常に0から始まります。文字列「tutorialspoint」があるとすると、そのインデックス付けは次のように行われます- T u t o r i a l s p o i n t 0 1 2 3 4 5 6 7 8 9 10 11 12 13 次に、ステートメントを解決するためのPythonスクリプトを見てみましょう- 例 def remove
-
文字列からn番目の文字を削除するためのPythonプログラム?
文字列は文字の配列を意味するため、開始アドレスは0です。そうすれば、すべての文字のインデックスを簡単に取得できます。そのインデックス番号を入力する必要があります。次に、その要素を削除します。したがって、文字列を2つのサブ文字列に分割します。また、2つの部分は、n番目のインデックス付き文字の前と、インデックス付き文字の後の2つの部分で、この2つの文字列をマージする必要があります。 例 Input: python n-th indexed: 3 Output: pyton 説明 アルゴリズム Step 1: Input a string. Step 2: input the index p