最长回文串

最长回文串

问题描述:

给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。

数据是大小写敏感的,也就是说,"Aa" 并不会被认为是一个回文串。

样例

给出 s = "abccccdd" 返回 7

一种可以构建出来的最长回文串方案是 "dccaccd"

解题思路:

先对给定的字符串排序,然后比较相邻元素是否相同,计算其相同个数,然后整除2加到事先设定的ss中,遍历完毕后,最后结果加1即可。
需要注意的细节分别有:
1、字符串长度为0
2、字符串长度为1
3、字符串中只有一种字符时,若为偶数,则最后结果不需要加1;若为奇数,返回字符串的长度即可。

代码实现:

class Solution {
public:
    /**
     * @param s a string which consists of lowercase or uppercase letters
     * @return the length of the longest palindromes that can be built
     */
    int longestPalindrome(string& s) {
        // Write your code here
         if(s.length()==0) return 0;
        if(s.length()==1) return 1;
        sort(s.begin(),s.end());
        int ss=0;
        int a=1;
        int i=0;
        int j=1;
        bool flag=0;//判断字符串中是否只有一种字符
        while(i<s.length()&&j<s.length()){
            if(s[i]==s[j]&&j<s.length()-1){
                a++;
                j++;
            }
            if(s[i]==s[j]&&j==(s.length()-1)){
                a++;
                if(i==0&&(a%2==1)) ss++;//字符串中只有一种元素并且个数为奇数
                ss+=((int)a/2)*2;
                return ss+flag;
            }
            if(s[i]!=s[j]){
                ss+=((int)a/2)*2;
                i=j;
                j++;
                a=1;
                flag=1;//字符串中不止一种字符
            }
        }
       return ss+flag;
    }
};

A题感悟:

细节决定成败!要想数据全部通过就得考虑到边边角角。学会了用sort函数对字符串排序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值