自己写的:
class Solution {
public:
bool isLongPressedName(string name, string typed) {
int slow = 0, fast = 0;
while (fast < typed.size())
{
if (slow < name.size() && typed[fast] == name[slow])
fast++, slow++;
else if (fast > 0 && typed[fast] == typed[fast - 1])
fast++;
else
return false;
}
if (slow == name.size())
return true;
return false;
}
};
特别要注意这段代码:
else if (fast > 0 && typed[fast] == typed[fast - 1])
一定要有前置条件fast > 0
,否则会报错,因为我们后面用到了表示下标的fast - 1
,没有这个前置条件的话,就可能会让下标为负,自然会报错,比如当name = "a",typed = "b"时,就会报错。
卡哥思路差不多,但是可能更科学吧。
卡哥代码:
class Solution {
public:
bool isLongPressedName(string name, string typed) {
int i = 0, j = 0;
while (i < name.size() && j < typed.size()) {
if (name[i] == typed[j]) { // 相同则同时向后匹配
j++; i++;
} else { // 不相同
if (j == 0) return false; // 如果是第一位就不相同直接返回false
// j跨越重复项,向后移动,同时防止j越界
while(j < typed.size() && typed[j] == typed[j - 1]) j++;
if (name[i] == typed[j]) { // j跨越重复项之后再次和name[i]匹配
j++; i++; // 相同则同时向后匹配
}
else return false;
}
}
// 说明name没有匹配完,例如 name:"pyplrzzzzdsfa" type:"ppyypllr"
if (i < name.size()) return false;
// 说明type没有匹配完,例如 name:"alex" type:"alexxrrrrssda"
while (j < typed.size()) {
if (typed[j] == typed[j - 1]) j++;
else return false;
}
return true;
}
};
标签:return,name,++,typed,fast,按键,925,size
From: https://www.cnblogs.com/hisun9/p/18678420