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