leetcode 925 長按鍵入

2022-06-09 22:42:15 字數 1760 閱讀 3616

你的朋友正在使用鍵盤輸入他的名字 \(name\)。偶爾,在鍵入字元 \(c\) 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。

你將會檢查鍵盤輸入的字元 \(typed\)。如果它對應的可能是你的朋友的名字(其中一些字元可能被長按),那麼就返回 \(true\)。

輸入:name = "alex", typed = "aaleex"

輸出:true

解釋:'alex' 中的 'a' 和 'e' 被長按。

輸入:name = "saeed", typed = "ssaaedd"

輸出:false

解釋:'e' 一定需要被鍵入兩次,但在 typed 的輸出中不是這樣。

輸入:name = "laiden", typed = "laiden"

輸出:true

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

這道題目是雙指標模擬題目,還是非常有意思的。我發現我還是額外的關注指標操作的題目, 好了該說模擬思路了

首先我們的模板字串是\(name\),我們要使用 \(typed\) 這個字串進行匹配。所以我們在匹配的時候需要先遍歷一下模板串,主迴圈就是遍歷模板串。

我們用兩個指標分別指向兩個字串的當前位置,初始的時候指向的索引都是\(0\),然後我們用\(while\)迴圈控制指標移動,在控制第乙個字串指標\(i\),不斷移動直到後乙個字元與當前的字元不一樣,同時記錄有多少個相同的字元。第乙個字元的指標i先移動,而且移動到了和最初位置的字元相同的最後乙個字元

然後我們看第二個字串的索引\(j\)所指的字元能否匹配上,如果\(j\)已經指向盡頭或者不匹配,那麼肯定\(false\), 然後我們用\(while\)迴圈控制\(j\)

移動到了和最初位置的字元相同的最後乙個字元,如果第二個匹配字串所計數的字元數量小於第乙個字串所計數的字元數量,那麼\(return false\), 然後 \(i++\),\(j++\)進行下一輪的匹配。這裡然後判斷如果\(i\)已經移動到了末尾,那麼肯定\(return false\)(這個是測試案例提醒我的),相當於匹配乙個空字串,只要有字元那麼怎麼都是錯的,不能匹配。

下面讓我們來看**環節,這是我提供的演算法

class solution  // 跳出迴圈的兩個條件 i+1==n || name[i] != name[i+1], 當前的指標還是指向i的

// 說明name沒有匹配完,例如 name:"pyplrzzzzdsfa" type:"ppyypllr"

if (i < name.size()) return false;

// 說明type沒有匹配完,例如 name:"alex" type:"alexxrrrrssda"

while (j < typed.size())

return true;}};

LeetCode925 長按鍵入

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

LeetCode 925 長按鍵入

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

LeetCode 925 長按鍵入

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