🌕 925. 长按键入
2022年6月20日
- algorithm
🌕 925. 长按键入
难度: 🌕
问题描述
解法
class Solution {
public boolean isLongPressedName(String name, String typed) {
// 思路:
// 双指针
int m = name.length();
int n = typed.length();
// 特殊情况特判
if(m > n) {
return false;
}
// m <= n
int sh = 0;
int la = 0; // 长的字符串
while(sh < m && la < n) {
char c = name.charAt(sh);
char d = typed.charAt(la);
if(c == d) {
sh ++;
la ++;
} else {
// 判断 la 能否向前移动
if(sh == 0) {
return false;
} else {
// 非名称首字符
while(la < n && typed.charAt(la - 1) == typed.charAt(la)) {
la ++;
}
// 超范判断
if(la == n) {
return false;
}
// [la] != [la - 1]
// 再次判断
if(typed.charAt(la) == c) {
sh ++;
la ++;
} else {
// 移除可能长按的可能性之后仍不相同
return false;
}
}
}
}
if(sh < m) {
// typed 遍历完,但是名字还没有输完
return false;
}
// 判断 name 遍历完之后,typed 之后的字符能否消去
while(la < n) {
if(typed.charAt(la) == typed.charAt(la - 1)) {
la ++;
} else {
return false;
}
}
return true;
}
}