https://leetcode.com/problems/unique-substrings-in-wraparound-string/
Consider the string
sto be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz", soswill look like this: "...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....".Now we have another string
p. Your job is to find out how many unique non-empty substrings ofpare present ins. In particular, your input is the stringpand you need to output the number of different non-empty substrings ofpin the strings.Note:
pconsists of only lowercase English letters and the size of p might be over 10000.Example 1:
Input: "a" Output: 1 Explanation: Only the substring "a" of string "a" is in the string s.
Example 2:
Input: "cac" Output: 2 Explanation: There are two substrings "a", "c" of string "cac" in the string s.
Example 3:
Input: "zab" Output: 6 Explanation: There are six substrings "z", "a", "b", "za", "ab", "zab" of string "zab" in the string s.
螺旋递增,单递推式dp,针对每个值记忆
class Solution {
public:
int findSubstringInWraproundString(string p) {
if(p.size() == 0) return 0;
long long result = 1;
int len = 1;
vector<int> used(26, 0);
used[p[0]-'a'] = 1;
for(int i = 1; i < p.size(); ++i){
if(valid(p[i-1], p[i])) ++len;
else len = 1;
result += max(0, len-used[p[i]-'a']);
used[p[i]-'a'] = max(used[p[i]-'a'], len);
}
return result;
}
bool valid(char ch1, char ch2){
if(ch1 == 'z' && ch2 == 'a') return true;
else if(ch2-ch1 == 1) return true;
else return false;
}
};
本文探讨了LeetCode上的一道题目,该题目要求在无限循环字符串中寻找输入字符串的所有非空子串并计数。通过使用动态规划方法,文章提供了一种高效的解决方案,并详细解释了其工作原理。

被折叠的 条评论
为什么被折叠?



