每日一题409.最长回文串

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
“abccccdd”
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

***解题思路:字符串由大小写字母组成,用一个int型数组来存储其中每个字母出现了多少次,回文串性质为只要是双数的字母数都可以组成回文串,所以我们遍历其中所有字母,次数为双数的,将出现个数加到length中,如果是单数就-1再加入length中
代码如下***

```cpp
class Solution {
public:
    int longestPalindrome(string s) {
        int word[128];//65~90是A~Z,97~122是a~z
        int length=0,single=0;
        memset(word,0,sizeof(word));
        for(int i=0;i<s.length();i++){//记录每一个字母出现的次数
            word[s[i]]++;
        }
        for(int i=65;i<=90;i++){
            if(word[i]%2==0){//双数次出现
                length=length+word[i];
            }
            else{//单数次出现
                    length=length+(word[i]-1);
                    single++;
            }
        }
        for(int i=97;i<=122;i++){
            if(word[i]%2==0){
                length=length+word[i];
            }
            else{
                    length=length+(word[i]-1);
                    single++;
            }
        }
        if(single!=0){//有奇数次字母
            return length+1;
        }
        return length;
    }
};
```

发布了35 篇原创文章 · 获赞 27 · 访问量 488

猜你喜欢

转载自blog.csdn.net/weixin_45221477/article/details/104958620