长按键入 索引处的解码字符串统计子串中的唯一字符
925. 长按键入
需要考虑到字符出现顺序,以及type最后若是有剩余的情况(例如a和ab理应是false);
int lenn = name.length();
int lent = typed.length();
if(lenn > lent) return false;
int i = 0;
int j = 0;
while(i < lenn && j < lent) {正常的双指针运行
if(name.charAt(i) == typed.charAt(j)) {
i++;
j++;
}
else if(j > 0 && typed.charAt(j) == typed.charAt(j - 1)) {
j++;
}else {直接时name和type不一样的情况
return false;
}
}
while(j < lent) {如果type有剩余的情况
if(typed.charAt(j) != typed.charAt(j - 1)) {
return false;
}
j++;
}
return i == lenn;
880. 索引处的解码字符串
long size = 0;long很关键
int n = s.length();
for(int i = 0; i < n; i++) {
char c = s.charAt(i);
if(Character.isDigit(c)) {
size *= c - '0';
}else {
size++;
}
}到此求出了最终size大小
for(int i = n - 1; i >= 0; i--) {
char c = s.charAt(i);
k %= size;
if(k == 0 && Character.isLetter(c)) {
return Character.toString(c);
}
if(Character.isDigit(c)) {
size /= c - '0';
}else {
size--;
}
}
828. 统计子串中的唯一字符
Map<Character, List
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(!map.containsKey(c)) {
map.put(c, new ArrayList<>());
map.get(c).add(-1);细节初始化
}
map.get(c).add(i);
}
int ans = 0;
for(Map.Entry<Character, List
List
cur.add(s.length());细节终止
for(int i = 1; i < cur.size() - 1; i++) {对于某个字符(假设它当前出现在了位置b)假设它前一个出现的位置为a,后一个出现的位置为c
ans += (cur.get(i) - cur.get(i - 1)) * (cur.get(i + 1) - cur.get(i));情况就有(b - a)*(c - b)不包含a和c
}
}
return ans;
浙公网安备 33010602011771号