题目:https://leetcode-cn.com/problems/long-pressed-name/
代码:
class Solution {
public boolean isLongPressedName(String name, String typed) {
char[] names = name.toCharArray();
char[] typeds = typed.toCharArray();
//name长度大于typed,肯定是false
//为了避免下方代码t-1处出现异常,额外判断0位置的字符
if (names.length > typeds.length || names[0] != typeds[0]) {
return false;
}
int n = 1;
int t = 1;
//双游标遍历
while (n < names.length && t < typeds.length) {
if (names[n] == typeds[t]) {
//相等,游标各自+1
n++;
t++;
} else if (typeds[t] == typeds[t - 1]) {
//不相等,如果是typed长按导致的则t+1
t++;
} else {
//不是长按导致的,返回false
return false;
}
}
//name还有字符,证明没输入完,false
if (n < names.length) {
return false;
}
//typed还有字符,可能剩下的都是长按导致
while (t < typeds.length) {
if (typeds[t] != typeds[t - 1]) {
//不是长按导致,false
return false;
}
t++;
}
return true;
}
}
将字符串转换成字符数组,使用双游标遍历,针对出现的各种情况进行判断即可解答,具体逻辑参考代码及注释。