首先我们知道每一个字串,最后一个字符(或者是第一个字符)只有26种可能性,以字母
a
a
a为结尾的长度为
l
e
n
len
len的字符串会产生
l
e
n
len
len个字串,那么我们用
m
a
p
<
c
h
a
r
,
i
n
t
>
map<char,int>
map<char,int>记录以字母
c
h
a
r
char
char为结尾的出现的最大字串的长度,长度为
m
a
p
<
c
h
a
r
,
i
n
t
>
map<char,int>
map<char,int>的
i
n
t
int
int。
constint maxn =100005;classSolution{public:intfindSubstringInWraproundString(string p){int n = p.size();if(n ==0){return0;}//vector<vector<int>>dp(26);
map<char,int>mp;
p ='@'+ p;int w =1;for(int i =1; i < n +1; i++){if((int)p[i]==(int)p[i -1]+1|| p[i -1]=='z'&& p[i]=='a'){
w +=1;}else{
w =1;}if(mp.count(p[i])==0){
mp[p[i]]= w;}else{
mp[p[i]]=max(mp[p[i]], w);}}int ans =0;//map<char, int>::iterator it;for(auto[key, val]: mp){// windows上似乎不能这么遍历
ans += val;}// for (auto& it : mp) {// ans += it.second;// }return ans;}};