xqn2017

导航

409. Longest Palindrome

原文题目:

409. Longest Palindrome

解题:

要找最长的回文串,思路就是建立一个字典char:int的map,遍历目标字符串,统计各个字符的个数,如果该字符有偶数个,那必然可以组成回文串,如果该字符是奇数个,那么就只能向下取偶了,同时还要加1,因为一个字符可以组成回文串,比如aaaff,那么就是faaaf这种,所以要特殊处理的就是奇数个数的字符,出现多个奇数个数字符时,总长度也只加1,所以可以在奇数个数字符出现时设置一个标志位。

AC代码:

class Solution {
public:
	int longestPalindrome(string s) 
	{
		if(s == "")
		{
			return 0;
		}
		int i = 0;
		int odd = 0;
		int even = 0;
		int flag = 0;
		map <char,int> maptmp;
		map <char,int>::iterator it;
		for(i =0; i< s.length();i++)
		{
			maptmp[s[i]]++;
		}
		for(it = maptmp.begin();it != maptmp.end();it++)
		{
			if(it->second %2 == 1)
			{
				odd += (it->second)/2;
				flag = 1;
			}
			else
			{
				even += it->second;
			}	
		}
		return flag?(even+2*odd+1):even;

	}
};

  

posted on 2018-02-27 18:38  xqn2017  阅读(100)  评论(0)    收藏  举报