467. Unique Substrings in Wraparound String

  1. Unique Substrings in Wraparound String@TOC
    Consider the string s to be the infinite wraparound string of “abcdefghijklmnopqrstuvwxyz”, so s will look like this: “…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…”.

Now we have another string p. Your job is to find out how many unique non-empty substrings of p are present in s. In particular, your input is the string p and you need to output the number of different non-empty substrings of p in the string s.

Note: p consists 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.

最开始我用的是set 截取每一段的子串然后最后算size,这样复杂度太高,
现在的方法是DP
abcd 其实就是 abcd bcd cd d有四种子串,如果出现abcddef 没关系,def ef f就可以存储
如果出现abcdbcd 由于是重复的,所以要每次在数组中取最大的值

**class Solution {
public:
    int findSubstringInWraproundString(string p) {
        vector<int> vec(26,0);
        int maxLenCur = 0;
        for(int i=0;i<p.length();i++){
            if(i>0 && ((p[i]-p[i-1]==1) || (p[i-1]-p[i]==25))){
                maxLenCur++;
            }
            else
                maxLenCur = 1;
            int index = p[i] - 'a';
            vec[index] = max(maxLenCur,vec[index]);
        }
        int res = 0;
        for(auto num:vec){
            res += num;
        }
        return res;
    }
};**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值