leetCode--最長迴文子串

題目:

在這裏插入圖片描述

官方答案(C++):

class Solution {
private:
	int expandAroundCenter(string s, int left, int right)
	{
		while (left >= 0 && right < s.size() && s[left] == s[right])
		{
			left--;
			right++;
		}
		return right - left - 1;
	}
public:
	string longestPalindrome(string s) {
		int size = s.size();
		if (size < 1) return "";
		int start = 0, end = 0;
		for (int i = 0; i < size; i++)
		{
			int len1 = expandAroundCenter(s, i, i);
			int len2 = expandAroundCenter(s, i, i + 1);
			int len = max(len1, len2);
			if (len > end - start +1)
			{
				start = i - (len - 1) / 2;
				end = i + len / 2;
			}
		}
		return s.substr(start, end-start+1);
	}
};

結果:

在這裏插入圖片描述
我也是醉了…這官方答案

網上見過的最好的答案:

class Solution {
public:
	string longestPalindrome(string s) {
		int n=s.length();
        int i=0,start=0,end=0,tmp_len=0,max_len=1,pos=0;
        while(i<n)
        {
            start=i;end=i;
            //跳過重複的字符串
            while(end<n-1 && s[end+1] == s[end])
            {
                ++end;
            }
            i=end+1;
            //兩邊擴展
            while(start > 0 && end < n-1 && s[start-1]==s[end+1])
            {
                --start;++end;
            }
            tmp_len=end-start+1;
            if(tmp_len > max_len)
            {
                max_len=tmp_len;
                pos=start;
            }
        }
        return s.substr(pos,max_len);
	}
};

在這裏插入圖片描述

補充知識

從字符串中提取字符串的函數substr()
原型:

basic_string substr(const size_type _Off = 0, const size_type _Count = npos) const
//npos代表最好一個字符

例子:

#include<string> 
#include<iostream> 
using namespace std;

void main() 
{ 
string s("12345asdf"); 
string a=s.substr(0,5);
cout<<a<<endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章