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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP