牛客巔峰賽S2鑽石&王者場B題-牛牛與字串2
阿新 • • 發佈:2020-12-12
連結:https://ac.nowcoder.com/acm/contest/9887/B
來源:牛客網
牛牛拿到了一個字串。他想知道除去字串本身以外,這個字串最大的公共前後綴的長度是多少?
例如,對於字串ABABA而言,“ABA”即是它的字首,也是它的字尾,且是最長的公共前後綴,因此最大的長度是3。
牛牛無法解決該問題,所以他只好向你求助,給定一個只包含大寫字母的字串s,返回除去字串本身以外公共前後綴最大長度,如果沒有任何一個公共前後綴滿足要求,返回-1即可。
1≤∣s∣≤106,且字串中只包含大寫字母
思路:
類似於KMP演算法,用一個指標維持字首,另外一個指標掃描字串
class Solution { public: /** * 程式碼中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可 * 給定一個字串s,返回具有相同字首字尾的子串的第二大長度,反之,返回-1即可。 * @param s string字串 代表題意中的字串s * @return int整型 */ int solve(string s) { // write code here int index = 0;//指標初始指向第一位 for(int i = 1;i < s.length(); ++i){//從第二位開始比較 if(s[i] == s[index])//當前和指標指向相等,指標繼續向下走 ++index; else{ if(s[i] == s[0])//當前和第一個相等,指向回到第二個 index = 1; else //當前和第一個都不相等,指標回到第一個 index = 0; } } if(index == 0)//遍歷到最後指標還在第一個位置,說明沒有最長 return -1; return index;//指標左部分為最大長度 } };