解题思路
B站视频讲解:https://www.bilibili.com/video/BV1cG4y1z7sn/?vd_source=a0bea6f5def58dc5711647a825ed97b6
LeetCode828_统计子串中的唯一字符_动态规划
代码
class Solution {
public int uniqueLetterString(String s) {
// dp[i][0]表示字符(i + 'A')造成的正面影响
// dp[i][1]表示字符(i + 'A')出现的索引
int[][] dp = new int[26][2];
for (int i = 0; i < 26; i++) {
// 初始化表示A-Z从未出现过
dp[i][1] = -1;
}
char[] charArray = s.toCharArray();
int length = charArray.length;
int res = 0;
// 表示新字符添加进来以后可以多多少个值
int preSum = 0;
for (int i = 0; i < length; i++) {
int index = charArray[i] - 'A';
// 表示字符(i + 'A')造成的正面影响
int currentCount = i - dp[index][1];
preSum = preSum + currentCount - dp[index][0];
dp[index][0] = currentCount;
dp[index][1] = i;
res += preSum;
}
return res;
}
}