[LeetCode ] Long Pressed Name
阿新 • • 發佈:2018-12-22
Your friend is typing his
name
into a keyboard. Sometimes, when typing a characterc
, the key might get long pressed, and the character will be typed 1 or more times.You examine the
typed
characters of the keyboard. ReturnTrue
if it is possible that it was your friends name, with some characters (possibly none) being long pressed.
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.
題意:當輸入一個字元時,這個字元可能出現多次,給出原串和顯示的串,問是否相匹配
思路:維護雙指標i,j,從j開始在type中找name[i],找到之後另i++,j等於找到的位置+1,然後繼續找,找不到返回false。
C程式碼:
bool isLongPressedName(char* name, char* typed) {
if(strcmp(name,typed) == 0) return true;
int len1 = strlen(name);
int len2 = strlen(typed);
int i,j,pos;
pos = 0;
for(i = 0; i < len1; i++) {
bool flag = false;
for(j = pos; j < len2; j++) {
if(name[i] == typed[j]) {
pos = j + 1;
flag = true;
break;
}
}
if(!flag) {
break;
}
}
if(i == len1) return true;
else return false;
}
Java程式碼:
public class Solution {
public boolean isLongPressedName(String name, String typed) {
if(name.equals(typed)) return true;
int pos = 0,i,j;
int len1 = name.length();
int len2 = typed.length();
for(i = 0; i < len1; i++) {
boolean flag = false;
for(j = pos; j < len2; j++) {
if(typed.charAt(j) == name.charAt(i)) {
pos = j + 1;
flag = true;
break;
}
}
if(!flag) break;
}
if(i == len1) return true;
else return false;
}
}