Long Pressed Name
给两个string, 一个是typed, 一个是name, 求一个是不是想输入name, 但是长按几个字符后, 变成了typed.
这题我用的是run length encode, 先encode两个变成a1b1c2这种形式, 然后看是不是length一样, 再看是不是name的数字小于typed的数字, 除此之外, 就是true.
class Solution {
class Pair{
Pair(char c, int a){
this.c = c;
this.a = a;
}
public String toString()
{
return this.c + " " + this.a;
}
char c;
int a;
}
public boolean isLongPressedName(String name, String typed) {
LinkedList<Pair> a = encode(name);
LinkedList<Pair> b = encode(typed);
if(a.size() != b.size())
return false;
int n = a.size();
for(int i = 0; i < n; i++) {
Pair ca = a.get(i);
Pair cb = b.get(i);
if(ca.c != cb.c)
return false;
if(ca.a > cb.a)
return false;
}
return true;
}
public LinkedList<Pair> encode(String s){
LinkedList<Pair> list = new LinkedList<>();
for(char c : s.toCharArray()){
if(list.isEmpty())
list.addLast(new Pair(c, 1));
else{
Pair pre = list.removeLast();
if(c == pre.c){
pre.a++;
list.addLast(pre);
}else
{
list.addLast(pre);
list.addLast(new Pair(c, 1));
}
}
}
return list;
}
}