题目链接:https://leetcode.com/problems/long-pressed-name/description/
Example 1:
Input: name = "alex", typed = "aaleex"
Output: true
Explanation: 'a' and 'e' in 'alex' were long pressed.
Example 2:
Input: name = "saeed", typed = "ssaaedd"
Output: false
Explanation: 'e' must have been pressed twice, but it wasn't in the typed output.
Example 3:
Input: name = "leelee", typed = "lleeelee"
Output: true
Example 4:
Input: name = "laiden", typed = "laiden"
Output: true
Explanation: It's not necessary to long press any character.
Note:
name.length <= 1000
typed.length <= 1000
- The characters of
name
andtyped
are lowercase letters.
思路:
- 若typed 符合要求,则typed 的 length(长度)满足条件:typed.length() >= name.length();
- i, j分别是指向name 和 typed的下标,i, j下标初始值都为0;
- 当 name[i] == typed[j] 时,i, j 向后移动一个单位;
- 当 name[i] != typed[j] 时,判断 typed[j] 是否等于name[i-1] (name[i-1] == typed[j-1]);
-
- 若 typed[j] != name[j-1] 则 typed 不满足,返回false。
- 若 typed[j] == name[i-1],则 ++j,直至 typed[j] != name[i-1],执行步骤2。
注意:根据上面的分析,需要用一个字符变量来存储name[i]的值,该字符变量初始化为空字符。
编码如下:
1 class Solution { 2 public: 3 bool isLongPressedName(string name, string typed) { 4 if (name.length() > typed.length()) return false; 5 6 char pre = ' '; 7 int indexOfName = 0; 8 9 for (int i = 0; i < typed.length(); ++i) 10 { 11 if (name[indexOfName] != typed[i] && pre == ' ') 12 return false; 13 14 if (name[indexOfName] == typed[i]) 15 { 16 pre = name[indexOfName]; 17 indexOfName++; 18 } 19 else 20 { 21 if (pre == typed[i]) 22 continue; 23 else 24 return false; 25 } 26 } 27 28 if (indexOfName != name.length()) return false; 29 30 return true; 31 } 32 };