简单DP题目,分成两部分处理,一部分是dp,另一部分是sum。dp[i]定义为包含p[i]时,拥有的可能性个数。如果p[i]与p[i+1]相连,则dp[i]=1+dp[i+1],否则,dp[i]为1。
但是sum的更新需要经一步判断,开辟了count一个map,避免重复计数。
class Solution {
public:
int findSubstringInWraproundString(string p) {
if(p.size()==0)
return 0;
int sum=0;
vector<int> dp(p.size(),0);
map<char,int> count;
dp[p.size()-1]=1;
count[p[p.size()-1]]=1;
sum=1;
for(int i=p.size()-2;i>=0;i--)
{
if((p[i]-'a'+1)%26==p[i+1]-'a')
dp[i]=1+dp[i+1];
else
dp[i]=1;
if(count[p[i]]<dp[i])
{
sum=sum-count[p[i]]+dp[i];
count[p[i]]=dp[i];
}
}
return sum;
}
};