【题目】
你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。
示例 :
输入:name = "alex", typed = "aaleex"
输出:true
解释:'alex' 中的 'a' 和 'e' 被长按。
示例 :
输入:name = "saeed", typed = "ssaaedd"
输出:false
解释:'e' 一定需要被键入两次,但在 typed 的输出中不是这样。
示例 :
输入:name = "leelee", typed = "lleeelee"
输出:true
示例 :
输入:name = "laiden", typed = "laiden"
输出:true
解释:长按名字中的字符并不是必要的。
提示:
name.length <= 1000 typed.length <= 1000 name 和 typed 的字符都是小写字母。
【思路】
使用两个指针i和j分别遍历name和typed数组,当name[i]和typed[j]相同或者typed[j]和typed[j-1]相同,则继续下一轮判断,否则返回False。
【代码】
python版本
class Solution(object):
def isLongPressedName(self, name, typed):
"""
:type name: str
:type typed: str
:rtype: bool
"""
if len(name) > len(typed):
return False
if len(name) == :
if len(typed) == :
return True
return False
# name[i]和typed[j]字符相同,或者typed[i]和typed[i-1]字符相同
i =
j =
while i < len(name) and j < len(typed):
if name[i] == typed[j]:
i +=
j +=
elif typed[j] == typed[j-1]:
j +=
else:
return False
# 循环结束,分为i<len(name)和j<len(typed)两种情况
if i < len(name):
return False
while j < len(typed):
if typed[j] == typed[j-1]:
j +=
else:
return False
return True
C++版本
class Solution {
public:
bool isLongPressedName(string name, string typed) {
if(name.size() > typed.size())
return false;
if(name.size() == ){
if(typed.size() == )
return true;
else
return false;
}
// 遍历,name[i]和typed[j]相同,或者typed[j]和typed[j-1]相同
int i=, j=;
while(i < name.size() && j < typed.size()){
if(name[i] == typed[j]){
i++, j++;
}else{
if(typed[j] == typed[j-1])
j++;
else
return false;
}
}
// 遍历结束,name或者typed还有元素未遍历
if(i < name.size())
return false;
while(j < typed.size()){
if(typed[j] == typed[j-1])
j++;
else
return false;
}
return true;
}
};