【LeetCode每日一题】[简单]925. 长按键入

it2024-06-20  44

【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是否配对到了最后 } }
最新回复(0)