C ++中最长的回文

假设我们有一个由小写或大写字母组成的字符串,我们必须找到可以用这些字母建立的最长回文的长度。现在该字符串区分大小写,因此此处不将“ Aa”视为回文。

因此,如果输入类似于“ abccccdd”,则输出将为7,因为可以构建的最长回文集为“ dccaccd”,其长度为7。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一张映射mp

  • 对于s中的每个字符

    • (将mp [i]增加1)

  • ma:= 0,c:= 0,ans:= 0

  • 对于mp中的每个键值对i

    • (将ma增加1)

    • 如果imod 2的值等于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

以上是 C ++中最长的回文 的全部内容, 来源链接: utcz.com/z/316332.html

回到顶部