【LeetCode每日一题】[简单]925. 长按键入
925. 长按键入
题目来源
算法思想:字符串
题目:
思路: 两个指针,分别指向两个字符串,依次比较指针上的字母
java代码
class Solution {
public boolean isLongPressedName(String name, String typed) {
char[] tmp1 = name.toCharArray();//转化成char数组
char[] tmp2 = typed.toCharArray();//转化成char数组
if (tmp1[0] != tmp2[0]) {//如果第一个字母不相同直接返回false
return false;
}
boolean flag = true;//标志位
int i = 0;//指向tnp1
int j = 0;//指向tmp2
int len1 = tmp1.length;//name长度
int len2 = tmp2.length;//typed长度
//i,j同时向后移动,比较每个位置上字母情况
while(i < len1 && j < len2) {//索引在合理范围内遍历,以j长度为准,j要遍历完
if (tmp2[j] != tmp1[i]) {//如果i,j指向的字母不相同,分两种情形
if (j > 0 && tmp2[j] != tmp2[j-1]) {//如果j与前一个位置不相同,即存在新新出现的字母,又与名字中的字母不同,直接返回false;
return false;
}else {//如果j与前一个位置相同,即存在重复字母,j++
j++;
}
}else {//如果i,j指向的字母相同,同时往后移动
i++;
j++;
}
}
while (j < len2 && tmp2[j] == tmp2[j-1]) {
//j向后移动,如果都是重复的字母,j==len2;
//如果有新的字母,即j != len2时,说明name与typed匹配失败,最后多了新字母
j++;
}
if (i != len1 || j != len2) {//判断,ij是否都移动到了末尾,如果没有,返回false;
return false;
}
return flag;
}
}
java代码–简化
看了答案,发现自己写语句的又长又臭,简洁版入下:
class Solution {
public boolean isLongPressedName(String name, String typed) {
char[] tmp1 = name.toCharArray();
char[] tmp2 = typed.toCharArray();
int i = 0;//指向name
int j = 0;//指向typed
int len1 = tmp1.length;//name长度
int len2 = tmp2.length;//typed长度
while (j < len2) {//j在范围内遍历
if (i < len1 && tmp2[j] == tmp1[i]) {//i在合理分为内,如果ij指向字母相同,同时向后移动
i++;
j++;
} else if (j > 0 && tmp2[j] == tmp2[j-1]) {//如果,字母不相同,但是是重复字母,j++;
j++;
} else {//其他情形均返回false;
return false;
}
}
return i == len1;//比较i是否配对到了最后
}
}