https://leetcode-cn.com/problems/long-pressed-name/
你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
输入:name = “alex”, typed = “aaleex”
输出:true
解释:‘alex’ 中的 ‘a’ 和 ‘e’ 被长按。
输入:name = “saeed”, typed = “ssaaedd”
输出:false
解释:‘e’ 一定需要被键入两次,但在 typed 的输出中不是这样。
具体实现代码如下
class Solution {
static class Group{
//创建一个类,来存一个字串,连续出现(或只有一个)字符和出现的数字
String key;
List<Integer> count;
Group(String s,List<Integer> t){
this.key = s;
this.count = t;
}
}
public boolean isLongPressedName(String name, String typed) {
Group g1 = groupify(name);//属性group化,化成这样的格式 String abcd, List [1,2,3,5]
Group g2 = groupify(typed);
if (!g1.key.equals(g2.key)){
//typed group化若不等于name,则必不是长键
return false;
}
for (int i = 0; i < g1.count.size(); i++) {
//遍历name group化后的链表,比较长度.
if (g1.count.get(i) > g2.count.get(i)){
return false;
}
}
return true;
}
public Group groupify(String s){
//group化
StringBuilder stringBuilder = new StringBuilder();
List<Integer> count = new ArrayList<>();
int achro = 0;
for (int i = 0; i < s.length(); i++) {
if (i == s.length() - 1 || s.charAt(i) != s.charAt(i+1)){
stringBuilder.append(s.charAt(i));
count.add(i - achro + 1);
achro = i + 1;
}
}
return new Group(stringBuilder.toString(),count);
}
}