环绕字符串中唯一的子字符串
难度:简单
利用动态规划的思想,遍历字符串,每次求以当前字符为结尾,最长的连续字符串长度,并将当前的结果存入对应的一维数组cnt(ps:cnt[0]表示以a为结尾最长的字符串长度,cnt[1]表示以b为结尾最长的字符串长度…以此类推),每次存入时需判断是否为当前字符的最大值。遍历完成后再求一维数组cnt的总和即可。
代码如下:
public class UniqueSubstringsInWraparoundString {
int[] cnt = new int[26];
public int findSubstringInWraproundString(String p) {
char[] chs = p.toCharArray();
int pre = 0;
for (int i = 0; i < chs.length; i++) {
if (i>0 && (chs[i]-chs[i-1]==1 || chs[i]-chs[i-1]==-25 )){
pre++;
}else{
pre = 1;
}
cnt[chs[i]-'a'] = Math.max(pre,cnt[chs[i]-'a']);
}
int res = 0;
for (int i = 0; i < 26; i++) {
res += cnt[i];
}
return res;
}
}
执行结果:成功