1. 题目来源
链接:925. 长按键入
2. 题目说明
3. 题目解析
方法一:双指针
很明显双指针可以解决该问题,简单记下思路:
- 设置
i, j
指针分别指向两个字符串首部, 设置l, r
分别计数重复出现的连续字符个数 - 如果两个指针指向的字符本身就不同,则直接
return false
- 如果
l > r
则为示例 2 的错误情况,false
- 如果循环完毕后两个指针没有指向各自的字符串结尾位置,则说明,一串走完了,另一串还有剩余字符,则
false
参见代码如下:
class Solution {
public:
bool isLongPressedName(string name, string typed) {
int n = name.size(), t = typed.size();
int i = 0, j = 0;
for (i, j; i < n && j < t; ++i, ++j) {
if (name[i] != typed[j]) return false;
int l = 1, r = 1;
while (i < n && name[i] == name[i + 1]) ++l, ++i;
while (j < t && typed[j] == typed[j + 1]) ++j, ++r;
if (l > r) return false;
}
if (i != n || j != t) return false;
return true;
}
};