解法一:双指针
一开始想用正则表达式偷懒,结果发现超时了。。。
用两个指针一起遍历 name
和 typed
。每次将name中连续的相同字符遍历完,如果满足长按键入,那么typed中对应位置应该有等长或更长的连续相同字符序列。
最后注意边界条件的判断。
class Solution {
public boolean isLongPressedName(String name, String typed) {
int pA = 0, pB = 0;
final int lenA = name.length(), lenB = typed.length();
int cnt = 0;
char ch;
while ((pA < lenA) && (pB < lenB)) {
ch = name.charAt(pA);
cnt = 1;
++pA;
while ((pA < lenA) && (ch == name.charAt(pA))) {
++cnt;
++pA;
}
while ((pB < lenB) && (ch == typed.charAt(pB))) {
--cnt;
++pB;
}
if (cnt > 0) {
return false;
}
}
if ((pA < lenA) || (pB < lenB)) {
return false;
}
return true;
}
}