467. Unique Substrings in Wraparound String
Solution
首先要觀察到一個特質, p中的子字串的結尾必定是a-z中的一個字元
而子字串以某一個某字元結尾的最大合法字串的長度,即是以這個字元結尾的合法組合數
ex. 假設abcd是字串p中以d結尾的最大子字串,那麼它能帶來的以d結尾的組合有 d, cd, bcd, abcd,剛好數目就是字串長度。
所以我們只需要把26個字元結尾的最大合法子字串的長度都進行累加,就可以得到答案。
public int findSubstringInWraproundString(String p) {
int[] nums = new int[26];
int maxLen = 0;
char preChar = 0;
for(int i = 0; i < p.length(); i++){
char curChar = p.charAt(i);
if(i > 0 && curChar == preChar+1 || preChar == 'z' && curChar == 'a'){
maxLen++;
}
else{
maxLen = 1;
}
nums[curChar-'a'] = Math.max(maxLen, nums[curChar-'a']);
preChar = curChar;
}
int ans = 0;
for(int num : nums){
ans += num;
}
return ans;
}
Last updated
Was this helpful?