C++ 中最长的回文串


假设我们有一个由小写或大写字母组成的字符串,我们需要找出可以用这些字母构建的最长回文串的长度。现在,字符串区分大小写,因此“Aa”在这里不被认为是回文串。

因此,如果输入像“abccccdd”这样,那么输出将是 7,因为可以构建的最长的回文串之一是“dccaccd”,其长度为 7。

为了解决这个问题,我们将按以下步骤进行 −

  • 定义一个映射图 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

更新于: 10-6-2020

2K+ 人浏览过

立即开始您的 职业生涯

通过完成课程获得认证

立即开始
广告