5367. 最長快樂前綴(181周賽,KMP)

「快樂前綴」是在原字符串中既是 非空 前綴也是後綴(不包括原字符串自身)的字符串。

給你一個字符串 s,請你返回它的 最長快樂前綴。

如果不存在滿足題意的前綴,則返回一個空字符串。

示例 1:

輸入:s = "level"
輸出:"l"
解釋:不包括 s 自己,一共有 4 個前綴("l", "le", "lev", "leve")和 4 個後綴("l", "el", "vel", "evel")。最長的既是前綴也是後綴的字符串是 "l" 。
示例 2:

輸入:s = "ababab"
輸出:"abab"
解釋:"abab" 是最長的既是前綴也是後綴的字符串。題目允許前後綴在原字符串中重疊。
示例 3:

輸入:s = "leetcodeleet"
輸出:"leet"
示例 4:

輸入:s = "a"
輸出:""

class Solution {
public:
	string longestPrefix(string s) {
		int i = 1, j = 0;
		vector<int>f(s.size() + 1);
		f[0] = -1;
		while (i < s.size())
		{
			if (j == -1 || s[i] == s[j])
			{
				f[++i] = ++j;
			}
			else {
				j = f[j];
			}
		}
		return s.substr(0, f[s.size()]);
	}
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章