Categories
木有技术

LeetCode 5. Longest Palindromic Substring

题目:https://leetcode.com/problems/longest-palindromic-substring/
思路:
分为两种回文,一种是”aba”的形式,另一种是”aa”的形式,当然了,”a”也算是回文.
我的想法指定一个对称中心,然后往两边搜索,这样能找到最大可能的回文。或许还有一种思路是利用类似栈的容器的,但是怎样判断”abcbaabcba”这种嵌套型的呢?
代码:

class Solution {
public:
	string longestP(string s, int pos, int type) {
		//Type: 0- 'a', 1-'aa'
		//Find palindrome at the position 'pos'
		int len = s.size();
		int posFront, posRear, maxLen;
		if (type == 0) {
			maxLen = 1; //'a'
			posFront = pos - 1;
			posRear = pos + 1;
			if (posFront < 0)
				return s;
		}
		else {
			maxLen = 0;
			posFront = pos - 1;
			posRear = pos;
		}
		while (posRear - posFront + 1 <= len) {
			if (s[posFront] != s[posRear]) {
				if (maxLen == 0)
					return "";
				return s.substr(posFront + 1, posRear - posFront - 1);
			}
			posFront--;
			posRear++;
			maxLen+=2;
		}
		return s.substr(posFront + 1, posRear - posFront - 1);
	}
	string longestPalindrome(string s) {
		int strSize = s.size();
		string maxStr = s.substr(0,1);
		for (int i = 1; i<strSize; i++) {
			string type1str = longestP(s, i, 0);
			string type2str = longestP(s, i, 1);
			if (type1str.size() > maxStr.size()) {
				maxStr = type1str;
			}
			if (type2str.size() > maxStr.size()) {
				maxStr = type2str;
			}
		}
		return maxStr;
	}
};

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.