題目描述
你會得到一個字串
num
,表示一個大型整數。
一個整數被稱為
good integer
,如果它符合以下條件:
它是
num
的長度為 3 的子字串。
它只由
一個唯一數字
構成(例如
777
、
000
)。
回傳最大的 good integer(以字串形式),如果不存在則回傳空字串
“”
。
注意:
子字串是字串中一段連續的字元序列。
num
或 good integer 可能包含前導零。
範例
範例 1:
輸入:num = “6777133339”
輸出:”777”
解釋:存在兩個 good integer:”777” 和 “333”,其中 “777” 最大,因此回傳 “777”。
範例 2:
輸入:num = “2300019”
輸出:”000”
解釋:”000” 是唯一的 good integer。
範例 3:
輸入:num = “42352338”
輸出:””
解釋:不存在長度為 3 且由單一數字構成的子字串。
Constraints
3 <= num.length <= 1000
num
只包含數字
0-9
解題思路
固定長度 3,一次掃過字串。
視窗內三個字元若相同,就更新目前最大字元。
走完後把最大字元複製 3 次回傳;沒找到就回傳空字串。
範例解題 - 範例一
以範例一
num = “6777133339”
為例,示意滑動長度為 3 的檢查過程:
起始視窗
→ “
[6 7 7]
7 1 3 3 3 3 9”
三個字元不相同 → 略過
bestAns = 0
(尚未找到)
視窗右移 1
→ “6
[7 7 7]
1 3 3 3 3 9”
三個字元相同 (777) → 比較 bestAns = 0 < ‘7’(字元7 ASCII碼為55) → 更新
bestAns = ‘7’
視窗右移 1
→ “6 7
[7 7 1]
3 3 3 3 9”
不相同 → bestAns 維持 ‘7’
視窗右移 1
→ “6 7 7
[7 1 3]
3 3 3 9”
不相同 → bestAns 維持 ‘7’
視窗右移 1
→ “6 7 7 7
[1 3 3]
3 3 9”
不相同 → bestAns 維持 ‘7’
視窗右移 1
→ “6 7 7 7 1
[3 3 3]
3 9”
三個字元相同 (333) → 比較
‘3’
與
‘7’
,
‘7’ 較大
→ 不更新
視窗右移 1
→ “6 7 7 7 1 3
[3 3 3]
9”
三個字元相同 (333) → 比較 ‘3’ 與 ‘7’,不更新
最終結果
:
bestAns = ‘7’
→ 回傳
“777”
參考程式碼(C++ 範例)
1 | 1 |
1 | class |
複雜度分析
時間複雜度
:O(n)
空間複雜度
:O(1)
LeetCode 成績
Runtime:0 ms — Beats 100% of C++ users
Memory:9 MB — Beats 77.37% of C++ users
補充說明
這題我的解法不一定是最佳解,
但我會盡可能去思考、調整,
朝著最佳解的方向努力。
如果有想要補充的歡迎在下面評論區補充歐 !
還有ASCII碼表為