Longest Palindrome

这题我也觉得起码是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. 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容