467 Unique substrings in wraparound string
class Solution {
public:
int findSubstringInWraproundString(string p) {
vector<int> max_to(26, 0);
int cur = 0;
while (cur < p.length()) {
int next = cur;
// 注意边界情况
while(next < p.length() && ((p[next] - p[cur] + 26) % 26 == (next - cur) % 26)) {
++ next;
}
int len = next - cur;
for (int i = cur; i < next && i < cur + 26; ++ i) {
int idx = ( p[i] - 'a' + 26) % 26;
max_to[idx] = max(len--, max_to[idx]);
}
cur = next;
}
return accumulate(max_to.begin(), max_to.end(), 0);
}
};
时间代价太大
class Solution {
public:
int findSubstringInWraproundString(string p) {
unordered_set<pair<char,int>> unique;
int len = p.length();
for (int i = 0; i < len; ++i) {
for (int j = i; j < len; ++j) {
if((p[j] - p[i] + 26) % 26 == (j - i) % 26) {
unique.insert(make_pair(p[i], j - i));
} else {
break;
}
}
}
return unique.size();
}
};