您的位置:首页 > 其它

LeetCode-Easy部分标签为HashTable 409. Longest Palindrome

2017-04-03 22:06 495 查看

原题

Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that
can be built with those letters
.

This is case sensitive, for example “Aa” is not considered a palindrome here.

Note:

Assume the length of given string will not exceed 1,010.

Example:

Input:
"abccccdd"

Output:
7

Explanation:
One longest palindrome that can be built is "dccaccd", whose length is 7.


题目意思

从给定的字符中选出一个最长的Palindrome,其定义为前后对称字符串。

题目分析

借助哈希表,或字典,求某个字符出现的个数,若为偶数,则取字符串中此字符所有个数,若为奇数,个数减1即可,只保留一个奇数不减去1。

代码实现1

纯Linq版本

Dictionary<char, int> dict = s.GroupBy(item => item).ToDictionary(g => g.Key, g => g.ToArray().Count());
int rtn = dict.Where(item => item.Value % 2 == 0).Sum(item => item.Value);
var oddList = dict.Where(item => item.Value % 2 == 1);
int oddCount = oddList.Count();
if (oddCount > 0)
return rtn + oddList.Sum(r => r.Value) - oddCount + 1;
return rtn;


代码实现2

用Hashset实现,

HashSet<int> hash = new HashSet<int>();
int count = 0;
foreach(var item in s)
{
if (hash.Contains(item))
{
hash.Remove(item); //配对成功,
count++;           //count加1
}
else
hash.Add(item);
}
return hash.Count > 0 ? count * 2 + 1 : count * 2;


更多参考

LeetCode-Easy部分中标签为HashTable的所有题目
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: