[LeetCode]Unique Substrings in Wraparound String

来源:互联网 发布:转视频格式的软件 编辑:程序博客网 时间:2024/06/09 19:55

这次还是动态规划的题:Unique Substrings in Wraparound String

467Unique Substrings in Wraparound String31.5%Medium题目描述是这样的:

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: 1Explanation: Only the substring "a" of string "a" is in the string s.

Example 2:

Input: "cac"Output: 2Explanation: There are two substrings "a", "c" of string "cac" in the string s.

Example 3:

Input: "zab"Output: 6Explanation: There are six substrings "z", "a", "b", "za", "ab", "zab" of string "zab" in the string s.

给了一个string s是这样的:abcdefg…xyzabcdefg...xyz这样无限循环,然后呢要求在新的string p里面招数有多少个非空的substring是在s里面的,也就是说要找出p里面有多少个类似于abc...或者是ghi...之类的substring。而且!!!xyzab...这样的也算(划重点!!!)

这个问题的动态规划的重点在于,如果你发现了一个新的substring,你是无法确定这个substring里面的substring是否之前有被统计过了,如果算法设计不好有可能出现重复统计或者是漏算了的情况。

26个字母,我用了一个vector来存放对应的各个字母的check,这个check表示这个字母在之前如果出现并且被统计过的话,它在那个substring是在第几位,因为我们知道,对于一个长度为n的substring来说,它的substring个数为1+2+3+...+n,因为每增加一位,个数就增加n。

但是对于一个存在substring已经出现过的substring来说,比如bcabcd,那么我们可以得到在遍历到a的时候,check[1]和check[2]分别是1和2,因为在第一个substring中b和c分别位于第一位和第二位,那么在第二次遍历到b、c的时候,此时b、c是分别位于第二位和第三位,那bc这个位于abcd之中substring前面已经出现过了怎么办呢,我们知道没增加1位就会增加n个substring,所以当b在第m位时和b在第n位时相比较会增加m-n个substring(m<n)。所以我们利用的是字符在substring中的第几位来判断增加的substring的个数。

听起来可能很绕,还是上代码吧

int findSubstringInWraproundString(string p){    vector<int> check;    for(int i=0;i<26;i++)    {        check.push_back(0);    }            int sub=0;    int length=0;    int temp=0;        for(int i=0;i<p.size();i++)    {        if(i>0)        {            if((p[i]-p[i-1]+26)%26!=1)            {                length=0;            }        }                length++;        if(check[p[i]-'a']<length)        {            sub+=(length-check[p[i]-'a']);            check[p[i]-'a']=length;        }    }        return sub;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩心理脆弱过于敏感怎么办? 父母老是骂打我怎么办 爸妈打架闹离婚怎么办 夫妻离婚后孩子户口怎么办 离婚后孩子户口怎么办落户 50岁父母要离婚怎么办 父母离婚小孩没有出生证该怎么办 离婚。父母一直在劝说该怎么办 老婆跟人跑了怎么办啊 父母50了要离婚怎么办 父母吵架了我该怎么办 父母看孩子总是吵架怎么办 20岁父母离婚我怎么办 碰到没素质的人怎么办 父母抛弃了我该怎么办 父母说家里没钱困难怎么办 遇到素质低的老婆怎么办 孩子考试心里素质差怎么办 5岁儿童脾气不好怎么办 有一个素质差的父母怎么办 孩子对什么都无所谓怎么办 孩子在学习上无所谓怎么办 孩子对学习无所谓的态度怎么办 孩子不上进什么都无所谓怎么办 倔强的学生不理老师怎么办 一岁宝宝特别犟怎么办 孩子遇到问题喜欢发脾气怎么办 企业培养新人跑了怎么办 二年级学生读不懂题目怎么办 6岁宝宝有鼻炎怎么办 外地儿童怎么办北京医保卡 江苏联宝投资的钱怎么办 银行叫开了证券怎么办 中班心理健康我不开心了怎么办 大学生心理健康课总是抢不到怎么办 孩子成绩提不上去怎么办 孩子数学不开窍怎么办 二年级 初中孩子语文不开窍怎么办 分到的班级都是差生怎么办 初三了英语差怎么办呀 初三了英语差的很怎么办