力扣 925. 长按键入

it2024-08-03  41

你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。

你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。

 

示例 1:

输入:name = "alex", typed = "aaleex" 输出:true 解释:'alex' 中的 'a' 和 'e' 被长按。 示例 2:

输入:name = "saeed", typed = "ssaaedd" 输出:false 解释:'e' 一定需要被键入两次,但在 typed 的输出中不是这样。 示例 3:

输入:name = "leelee", typed = "lleeelee" 输出:true 示例 4:

输入:name = "laiden", typed = "laiden" 输出:true 解释:长按名字中的字符并不是必要的。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/long-pressed-name 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

解题思路:

1.依次比较两个字符串的每一个字符,

如果相同,就比较下一个,

如果不同,有2种情况,如果当前字符跟前面的一个字符相同,跳  下一个

                                     如果不同,返回false

循环结束,如果typed未到最后一个字符,判断当前位置后面所有字符是不是跟当前位置的字符相同

以及name是不是到最后一个了。

bool isLongPressedName(char * name, char * typed){ if(name && !typed) return false; else if(!name && typed) return false; char p = 0; int len_name = strlen(name); int len_typed = strlen(typed); int i = 0; int j = 0; do{ if(name[i] == typed[j]) { i++; j++; p = typed[j]; } else if(name[i] != typed[j]) { if(p == typed[j])//abc,abbc 这种情况 { j++; } else { return false; //abc,adc这种情况 } } }while(i<len_name&&j<len_typed); //printf("i=%d\n,j=%d,p=%c\n",i,j,p); while(j<len_typed) //abc,abcde这种情况 { if(p != typed[j]) { return false; } j++; } if(i == len_name) //name到最后一个字符了,说明name所有字符都匹配完了 { return true; } else { return false; } }

 

最新回复(0)