Longest Palindrome

这题我也觉得起码是Medium的难度阿。。

Longest Palindrome_第1张图片

给定这些字母,感觉有好多种组合的可能性!我的第一反应是用backtracking组合出所有的字母combination 然后一个一个计算Palindrome。但是首先backtrack combination就很难了,还有速度问题。一脸懵逼啊T^T


求偶数个字符的个数。 我怎么完全没想到这个。。。。因为回文有两种形式。odd case 和even case。如果所有字符都是偶数出现,那最长为2*even number. 如果有字符是奇数。 2*count + 1.

智障啊。。。

Longest Palindrome_第2张图片

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。

Longest Palindrome_第3张图片

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. 

Longest Palindrome_第4张图片

你可能感兴趣的:(Longest Palindrome)