leetcode 925. 长按键入

xiaoxiao2025-09-26  248

题目:

两个字符串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(); } }

 

转载请注明原文地址: https://www.6miu.com/read-5036908.html

最新回复(0)