给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。数据是大小写敏感的,也就是说,"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); }};
c++ code: 最长回文串
最新推荐文章于 2024-05-30 18:30:18 发布