(M)Dynamic Programming:467. Unique Substrings in Wraparound String

来源:互联网 发布:负反馈放大器实验数据 编辑:程序博客网 时间:2024/06/07 09:06

参考大神的分析:

我们看abcd这个字符串,以d结尾的子字符串有abcd, bcd, cd, d,那么我们可以发现bcd或者cd这些以d结尾的字符串的子字符串都包含在abcd中,那么我们知道以某个字符结束的最大字符串包含其他以该字符结束的字符串的所有子字符串,说起来很拗口,但是理解了我上面举的例子就行。那么题目就可以转换为分别求出以每个字符(a-z)为结束字符的最长连续字符串就行了,我们用一个数组cnt记录下来,最后在求出数组cnt的所有数字之和就是我们要的结果啦。

class Solution {public:    int findSubstringInWraproundString(string p) {        vector<int> cnt(26, 0);        int len = 0;        for (int i = 0; i < p.size(); ++i) {            if (i > 0 && (p[i] == p[i - 1] + 1 || p[i - 1] - p[i] == 25)) {                ++len;            } else {                len = 1;            }            cnt[p[i] - 'a'] = max(cnt[p[i] - 'a'], len);        }        return accumulate(cnt.begin(), cnt.end(), 0);    }};


原创粉丝点击