环绕字符串中唯一的子字符串

定义字符串 base 为一个 “abcdefghijklmnopqrstuvwxyz” 无限环绕的字符串,所以 base 看起来是这样的:
“…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd….”.
给你一个字符串 s ,请你统计并返回 s 中有多少 不同非空子串 也在 base 中出现。

  • 输入:s = “a”

  • 输出:1
    解释:字符串 s 的子字符串 “a” 在 base 中出现。

  • 输入:s = “cac”

  • 输出:2
    解释:字符串 s 有两个子字符串 (“a”, “c”) 在 base 中出现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var findSubstringInWraproundString = function(p) {
if(!p.length){
return 0;
}
//用来记录子串
let pre=1,res=0,hash={
[p[0]]:1
};
for(let i=1;i<p.length;i++){
if(p[i].charCodeAt()-p[i-1].charCodeAt()===-25||
p[i].charCodeAt()-p[i-1].charCodeAt()===1
){
pre+=1;
}else{
pre=1;
}
hash[p[i]]=hash[p[i]]?Math.max(hash[p[i]],pre):pre;
}
for(let key in hash){
res+=hash[key];
}

return res;
};