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

C++で最長の回文


小文字または大文字で構成される文字列があるとすると、それらの文字で作成できる最長の回文の長さを見つける必要があります。現在、文字列では大文字と小文字が区別されるため、ここでは「Aa」は回文とは見なされません。

したがって、入力が「abccccdd」の場合、出力は7になります。これは、構築できる最長の回文の1つが「dccaccd」であり、長さが7であるためです。

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

  • 1つのマップmpを定義する

  • sの各文字iについて

    • (mp [i]を1増やします)

  • ma:=0、c:=0、ans:=0

  • mpのキーと値のペアiごとに

    • imod 2の値が1と同じ場合、-

      • (maを1増やします)

    • c:=c+iの値

  • ma> 0の場合、-

    • (maを1減らします)

  • ans:=c --ma

  • ansを返す

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int longestPalindrome(string s) {
      unordered_map<char, int> mp;
      for (auto i : s)
         mp[i]++;
      int ma = 0, c = 0, ans = 0;
      for (auto i : mp) {
         if ((i.second) % 2 == 1)
            ma++;
         c += i.second;
      }
      if (ma > 0)
         ma--;
      ans = c - ma;
      return ans;
   }
};
main(){
   Solution ob;
   cout << (ob.longestPalindrome("abccccdd"));
}

入力

"abccccdd"

出力

7

  1. C++のプライムパリンドローム

    N以上の最小のプライムパリンドロームを見つける必要があるとします。したがって、Nが13の場合、最小のパリンドロームは101になります。 これを解決するには、次の手順に従います- Nが8〜11の範囲にある場合は、11を返します 1〜99999の範囲のiの場合 s:=文字列としてのi r:=s リバースr num:=sとrのサブストリングをインデックス1から連結してから、数値に変換します =Nで、numが素数の場合、numを返します 0を返す 理解を深めるために、次の実装を見てみましょう- 例 #include <bits/st

  2. C++で回文を壊す

    回文文字列の回文があるとすると、文字列が回文ではない字句的に最小の文字列になるように、1文字を小文字の英語文字に置き換える必要があります。そうしたら、最後の文字列を見つける必要があります。そうする方法がない場合は、空の文字列を返します。したがって、入力が「abccba」のような場合、出力は「aaccba」になります。 これを解決するには、次の手順に従います- 変更:=false 文字列のサイズが1の場合は、空白の文字列を返します i:=0およびj:=sの長さ– 1 leftA:=TrueおよびrightA:=True i