码迷,mamicode.com
首页 > 其他好文 > 详细

Longest Palindromic Substring

时间:2015-02-01 13:27:48      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

 求解回文字符串:这道题是查找资料才得到的解法。具体思路如下:比如对字符串abcba,做如下处理#a#b#c#b#a#,目的是消除偶数的回文。计算一点的回文长度时,根据保存的前端的最大回文长度和中心点,判断当前点应该是从0开始计算,还是可以根据利用以前的结果。主要就是这个思路。

class Solution {
public:
	
	string result;
	int maxpoint;
	int maxlen;
	vector<int> buf;
    string longestPalindrome(string s) {
         if(s.empty())
		  return s;
         string temp;
		 temp = Init(s);
		 buf.resize(temp.size());
		 maxpoint = 0;
		 maxlen =0;
		 int len =0;
		 for(int i=0; i<temp.size(); i++)
		 {

			len = Getlen(temp,i);
            buf[i] = len;
		    if(len >= maxlen)
		    {
               maxlen   = len;
			   maxpoint = i;
			   
			}
		 }
		 for(int i = maxpoint - (maxlen - 1); i<= maxpoint + maxlen -1; i++)
		 {
             if(temp[i] == ‘#‘)
			 	continue;
			 result.push_back(temp[i]);
		 }
		 return result;
           
        
    }
	int Getlen(string& pattern,int mid)
	{
	    int left=0, right =0;
		int index =1;
		if(maxpoint + maxlen > mid)
		{
            if(buf[2*maxpoint - mid] + mid - maxpoint > maxlen)
            {
                index = maxlen - (mid - maxpoint);
			}
			else
			{
                index = buf[2*maxpoint - mid];
			}
		}
		while(1)
		{
          if(mid - index<0)
		  	break;
		  if(mid + index>= pattern.size())
		  	break;
		  if(pattern[mid-index] != pattern[mid + index])
		  	break;
		  index++;
		}
		return index;
	}
	string Init(string& s)
    {
        string temp;
		bool flag = false;
        temp.push_back(‘#‘);
		for(int i=0; i<s.size(); )
		{
		    if(flag == false)
		    {
				temp.push_back(s[i]);
                flag = true;
				i++;
			}
			else
			{
               temp.push_back(‘#‘);
               flag = false;
			}
		}
        if(flag == true)
        {
			temp.push_back(‘#‘);
		}

		return temp;
	}
    
  
};

  

 

Longest Palindromic Substring

标签:

原文地址:http://www.cnblogs.com/xgcode/p/4265419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!