LeetCode 5: 最长公共子串(Longest Palindromic Substring)解法汇总

文章目录

  • 我的解法$O(n^3)$
  • 改进$O(n^2)$
  • 官方解法

更多LeetCode题解

我的解法 O ( n 3 ) O(n^3) O(n3)

Time Limit Exceeded,大家看看就好了,不是好的解法。暴力解法,其实质就是找出所有的i,j并查看是否为回文串,只不过使用了find_last_of(s[i])跳过了某些位置j。

//Time Limits Exceeded
class Solution1 {
public:
	string longestPalindrome(string s) {
		int res = 1;
		string str_res;
		if (s == "" || s.size() < 2) {
			return s;
		}
		str_res = *(s.end() - 1);
		for (int i = 0; i < s.size() - 1; i++) {
			string s_temp = s;
			int index = s_temp.find_last_of(s[i]);
			while (index != i && index - i + 1 > res) {
				if (isPalindrome(s.begin() + i, s.begin() + index + 1)) {
					res = index - i + 1;
					str_res.assign(s.begin() + i, s.begin() + index + 1);
					break;
				}
				else {
					s_temp.assign(s.begin(), s.begin() + index);
					index = s_temp.find_last_of(s[i]);
				}
			}
		}
		return str_res;
	}
	/*
	bool isPalindrome(string::iterator begin, string::iterator end) {
		bool palindrome = true;
		for (int i = 0; i < end - begin; i++) {
			if (*(begin + i) != *(end - 1 - i)) {
				palindrome = false;
				break;
			}
		}
		return palindrome;
	}
	*/
	bool isPalindrome(string::iterator begin, string::iterator end) {
		string str1(begin, end);
		string str2(str1.rbegin(), str1.rend());
		if (!str1.compare(str2))
			return true;
		else
			return false;
	}
};

改进 O ( n 2 ) O(n^2) O(n2)

向两边扩散

//Accepted Solution
class Solution {
public:
	string longestPalindrome(string s) {
		int res = 0;
		string res_str;
		if (s == "") {
			return s;
		}
		for (int i = 0; i < s.size(); i++) {
			int low = isPalindorme(s, i, i);
			if (2 * (i - low) + 1 > res) {
				res = 2 * (i - low) + 1;
				res_str = s.substr(low, 2 * (i - low) + 1);
			}
			low = isPalindorme(s, i, i + 1);
			if (2 * (i - low) + 2 > res) {
				res = 2 * (i - low) + 2;
				res_str = s.substr(low, 2 * (i - low) + 2);
			}
		}
		return res_str;
	}
	int isPalindorme(string s, int low, int high) {
		while (low >= 0 && high < s.size()) {
			if (s[low] == s[high]) {
				low--;
				high++;
			}
			else {
				break;
			}
		}
		return low + 1;
	}
};

官方解法

英文版
中文版

你可能感兴趣的:(LeetCode刷题题解记录)