LeetCode 925 長按鍵入

2021-09-25 02:12:48 字數 2334 閱讀 9416

你的朋友正在使用鍵盤輸入他的名字 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

解釋:長按名字中的字元並不是必要的。

**實現:

c++:

第一種方法:

要滿足返回true的條件與兩個因素有關:

字元在name和typed**現的順序要保持一致;

對於每個字元在typed中每次連續出現的長度不能小於name中連續出現的長度;

例如name = 「saeede」, typed = "ssaaeeddee"時。

name中字元出現的順序是saede。typed**現的順序也是saede;且它們連續出現的個數,name是[1,1,2,1,1], typed是[2,2,2,2,2]。所以結果是true。

具體編碼的時候,定義兩個變數c1和c2,分別用來統計兩個字串同一字元連續出現的次數。同時遍歷name和typed。

對於每個字串,遇到不同字元的時候就暫停,比較不同的字元是否相等,如果相等再比較c2是否大於等於c1(c1和c2存放是前乙個字元連續出現的次數)。如果字元不等或者,c2小於c1則返回false,繼續直到遍歷結束。

這個演算法需要遍歷兩個字串做統計,演算法的複雜度是o(len(name)+len(typed))。

第二種方法:

如果typed可以返回true,那麼除去typed中那些多鍵入的字元後,新的字元一定是和name相等的。

具體實現的方法依然是通過統計的方式。

我們定義乙個變數c來做統計。遍歷typed:

如果相應位置typed中的字元和name中的字元相等,那麼c加1,接著比較typed和name的下乙個字元;

否則,拿typed中的當前字元和typed的前乙個字元再做比較,如果相等,說明這是乙個多鍵入的字元,不做統計,typed移動到下乙個字元,再和name中的那個字元做比較。

如此遍歷下去,如果中間發生:typed的字元和name中的字元不等且typed的當前字元和typed的前乙個字元也不等,應該返回false。

如果對typed的遍歷成功結束,需要比較c和name的長度是否相等(考慮name是"dee",typed是"dde"的情況)。

該方法僅僅對typed遍歷,所以演算法複雜度為o(len(typed))。

流程如下圖所示:

# 設定標誌位

c = 0

for i in range(len(typed)):

if name[c] == typed[i]:

c += 1

elif typed[i] != typed[i-1]:

return false

if c >= len(name):

break

return c==len(name)

LeetCode925 長按鍵入

你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回 true。示例 1 輸入 name alex typed aaleex ...

LeetCode 925 長按鍵入

你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回 true。示例 1 輸入 name alex typed aaleex ...

leetcode925 長按鍵入

你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回 true。示例 1 輸入 name alex typed aaleex ...