题目:
两个字符串A,B,查询B是否可能是A中的某些字符重复多次形成的。
思路:
两个指针,一个指向字符串A,一个指向字符串B,如果B[I]==A[I],那么移动两个指针,否则一直移动i。
如果指针j到了A的结尾,需要检查B是否后面的字符一直相同,即B多出的那一部分必须和A的最后一个字符相同。如果相同,则匹配。
如果指针i到了B的结尾,判断是否已经到了A的结尾,如果没有,那么不匹配。
代码:
class Solution {
public:
bool isLongPressedName(string name, string typed) {
int len = typed.length();
int lenname = name.length();
int i=0,j=0;
if(name[i++]!=typed[j++])return false;
bool flag = true;
while(i<len){ //两个指针的移动
if(j==lenname)break;
if(typed[i]==name[j]){
i++;j++;
}
else if(typed[i]==typed[i-1]){
i++;
}
else{
return false;
}
}
if(j!=lenname)return false; //如果name没有结尾
while(i<len){ //检测typed多出的部分是否与name最后字符相同。
if(typed[i]!=typed[i-1])return false;
i++;
}
return true;
}
};
这段代码可能更直观:
class Solution {
public boolean isLongPressedName(String name, String typed) {
int p = 0;
for(int i = 0;i < typed.length();i++){
if(p < name.length() && typed.charAt(i) == name.charAt(p)){
p++;
}else{
if(i > 0 && typed.charAt(i) == typed.charAt(i-1)){
continue;
}else{
return false;
}
}
}
return p == name.length();
}
}