这题我也觉得起码是Medium的难度阿。。
给定这些字母,感觉有好多种组合的可能性!我的第一反应是用backtracking组合出所有的字母combination 然后一个一个计算Palindrome。但是首先backtrack combination就很难了,还有速度问题。一脸懵逼啊T^T
求偶数个字符的个数。 我怎么完全没想到这个。。。。因为回文有两种形式。odd case 和even case。如果所有字符都是偶数出现,那最长为2*even number. 如果有字符是奇数。 2*count + 1.
智障啊。。。
one pass solution:
space: O(1). Time O(n)
每次见到一个character,flip. 第一次见,set true。第二次见,set false. 第三次见,set true,第四次见set false.
如果见到的时候map[c] 为false, len +2.
如果palindrome的length比string的length小的话, len再加1。
HashSet Solution:【比较Intuitive】
用hashset来装character。第一次见,加入hashset. 第二次见,从set里remove这个character,并且count++。第三次见,又加进来。
比如 "abccba" 最后结束的时候,hashset里是empty的,count 会因为删除了3次而=3. 最后的len = 3*2+1=6.
如果是"nckck" 可以做成kcnck的长度5的palindrome. 我们最后其实删了c,k从hashset里。 increase count by 2. 因为set不为空,所以return 2*2 +1 = 5.