题目:
我的解法:
思路:用两个栈维护两个字符串,反向的将每个字符输入到栈中,每次从两个栈中各取出一个char,比较这两个char是否相同,如果不同则返回false。如果stack_1的下一个字符与上一个取出的字符不相同,则将stack_2中与上一个字符相同的全部取出,再比较下一字符。最后,如果stack_1为空而stack_2不为空,则判断stack_2中是否还有与最后一个取出字符不相同的字符,如果有则返回false。(看了官方题解感觉想复杂了)
class Solution {
char last_char;
public boolean isLongPressedName(String name, String typed) {
int name_len = name.length();
int typed_len = typed.length();
if(name_len>typed_len){
return false;
}
Deque<Character> stack_1 = new LinkedList<Character>();
Deque<Character> stack_2 = new LinkedList<Character>();
for(int i=name_len-1; i>=0; i--){
stack_1.push(name.charAt(i));
}
for(int j=typed_len-1; j>=0; j--){
stack_2.push(typed.charAt(j));
}
while(!stack_1.isEmpty()){
char n = stack_1.pop();
last_char = n;
// System.out.println(n);
// System.out.println(stack_2.peek());
if(!stack_2.isEmpty()&&stack_2.peek()==n){
char t = stack_2.pop();
}else{
return false;
}
if(!stack_1.isEmpty()&&stack_1.peek()!=last_char){
while(!stack_2.isEmpty()&&stack_2.peek()==last_char){
stack_2.pop();
}
}
}
while(!stack_2.isEmpty()){
if(stack_2.peek()!=last_char){
return false;
}
stack_2.pop();
}
return true;
}
}
官方题解:
class Solution {
public boolean isLongPressedName(String name, String typed) {
int i = 0, j = 0;
while (j < typed.length()) {
if (i < name.length() && name.charAt(i) == typed.charAt(j)) {
i++;
j++;
} else if (j > 0 && typed.charAt(j) == typed.charAt(j - 1)) {
j++;
} else {
return false;
}
}
return i == name.length();
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/long-pressed-name/solution/chang-an-jian-ru-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。