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

C++での特定の文字列の最大重み変換


問題の説明

AとBのみで構成される文字列があるとします。任意の文字を切り替えることで、指定された文字列を別の文字列に変換できます。したがって、与えられた文字列の多くの変換が可能です。タスクは、最大の重み変換の重みを見つけることです。

刺し傷の重さは、以下の式を使用して計算されます-

Weight of string = Weight of total pairs + weight of single characters - Total number of toggles.
  • 2つの連続する文字は、異なる場合にのみペアと見なされます。

  • 単一のペアの重み(両方の文字が異なります)=4

  • 1文字の太さ=1

入力文字列が-"AA"の場合、出力は3-

になります。
  • 指定された文字列の変換は、「AA」、「AB」、「BA」、および「BB」です。

  • 最大ウェイト変換は「AB」または「BA」です。そして、重量は「1ペア-1トグル」=4-1=3です。

アルゴリズム

1. If (n == 1)
   maxWeight(str[0..n-1]) = 1
2. Else If str[0] != str[1]
   maxWeight(str[0..n-1]) = Max (1 + maxWeight(str[1..n-1]), 4 + getMaxRec(str[2..n-1])
3. Elses
   maxWeight(str[0..n-1]) = Max (1 + maxWeight(str[1..n-1]), 3 + getMaxRec(str[2..n-1])

#include<bits/stdc++.h>
using namespace std;
int getMaxRec(string &str, int i, int n, int lookup[]){
   if (i >= n) {
      return 0;
   }
   if (lookup[i] != -1) {
      return lookup[i];
   }
   int ans = 1 + getMaxRec(str, i + 1, n, lookup);
   if (i + 1 < n) {
      if (str[i] != str[i+1]) {
         ans = max(4 + getMaxRec(str, i + 2, n, lookup), ans);
      } else {
         ans = max(3 + getMaxRec(str, i + 2, n, lookup), ans);
      }
   }
   return lookup[i] = ans;
}
int getMaxWeight(string str){
   int n = str.length();
   int lookup[n];
   memset(lookup, -1, sizeof lookup);
   return getMaxRec(str, 0, str.length(), lookup);
}
int main(){
   string str = "AA";
   cout << "Result = " << getMaxWeight(str) << endl;
   return 0;
}
出力 上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Result = 3

  1. 特定の文字列がC++の回文の回転であるかどうかを確認します

    ここでは、特定の回転後の1つのストリングが回文であることがわかります。回文は、両方向で同じ文字列です。それがAAAADのようなものである場合、弦の回転は回文です。これは直接の回文ではありませんが、そのローテーションAADAAは回文です。 文字列が回文で回転しているかどうかを確認するには、最初にこれが回文であるかどうかを確認し、その後、1文字ずつ回転させてから、もう一度確認します。この確認はn回実行されます。ここでnは文字数です。 例 #include <iostream> #include <string> #include <algorithm> usi

  2. C++で指定された製品のN個の整数の最大GCD

    2つの整数NとPがあるとします。PはN個の未知の整数の積です。これらの整数の可能な最大GCDを見つける必要があります。 N =3、P =24とすると、異なるグループは{1、1、24}、{1、2、12}、{1、3、8}、{1、4、6}、{2 、2、6}、{2、3、4}。 GCDは1、1、1、1、2、1です。したがって、ここで答えは2です。 Pのすべての素因数を見つけて、ハッシュマップに保存します。素因数がすべての整数で共通である場合、N個の整数の最大公約数は最大GCDになります。したがって、P =p 1の場合 k1 * p 2 k2 *…*p n kn 。ここで、piは素因