C ++中最长的回文
因此,如果输入类似于“abccccdd”,则输出将为7,因为可以构建的最长回文集为“dccaccd”,其长度为7。
为了解决这个问题,我们将遵循以下步骤-
定义一张映射mp
对于s中的每个字符
(将mp[i]增加1)
ma:=0,c:=0,ans:=0
对于mp中的每个键值对i
(将ma增加1)
如果imod2的值等于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