c++ code: 最长回文串

给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。数据是大小写敏感的,也就是说,"Aa" 并不会被认为是一个回文串。 注意事项假设字符串的长度不会超过 1010。您在真实的面试中是否遇到过这个题? Yes样例给出 s = "abccccdd" 返回 7一种可以构建出来的最长回文串方案是 "dccaccd"。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 heretypedef struct _mapval{bool isEven;int count; //字符数量}mapval;if(s.size() <= 0 ) return 0; mapphone2intmap;char *phones = new char [s.size()+1];memset(phones, 0, s.size()+1);strcpy(phones, s.c_str());char *tmpphone = phones;while(*tmpphone != '\0'){map::iterator it = phone2intmap.find(*tmpphone);if(it != phone2intmap.end()){it->second.isEven = (it->second.isEven == true)?false:true;it->second.count += 1;phone2intmap[it->first] = it->second;}else{mapval curval;curval.isEven = false;curval.count = 1;phone2intmap.insert(make_pair(*tmpphone, curval));}tmpphone++;}delete []phones;int sumEvenNum = 0;int sumOddNum = 0;int oddMaxLen = 0;bool flag = false;map::iterator it = phone2intmap.begin();while(it != phone2intmap.end()){if(it->second.isEven) sumEvenNum += it->second.count;else{flag = true;if(it->second.count > 2) sumOddNum += it->second.count - 1; }phone2intmap.erase(it++);}sumOddNum += (true == flag) ? 1 : 0;return (sumEvenNum + sumOddNum); }};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值