题目链接
就是连续的子字符串,且不能重复,计算子字符串有多少
例如
输入: "zab"
输出: 6
解释: 在字符串 S 中有六个子串“z”、“a”、“b”、“za”、“ab”、“zab”。
因为他是环形的所以z后面就是a所以连续的
那么我们只要对a进行判断就可以了
我们dp['a'-26]
表示以字母a结束的字符串最长有多长
对于每一个字符的前一个字符是否是连续的写一个函数进行判断
public boolean isContains(char a,char b) {
if(a=='z') {
return b=='a';
}else {
return a+1==b;
}
}
对于每个字符串,要么他是连续的要么就是1,只要取最大值就可以了
public int findSubstringInWraproundString(String p) {
if(p.length()==1){
return 1;
}
int Total=0;
int[] dp=new int[27];
int cnt=0;
for(int i=0;i<p.length();i++) {
if(i>0&&isContains(p.charAt(i-1), p.charAt(i))) {
cnt++;
}else {
cnt=1;
}
dp[p.charAt(i)-'a']=Math.max(dp[p.charAt(i)-'a'], cnt);
}
for(int i=0;i<dp.length;i++) {
Total+=dp[i];
}
return Total;
}