〔Leetcode〕 2730. Find the Longest Semi-Repetitive Substring (Medium)
[Leetcode] 2730. Find the Longest Semi-Repetitive Substring (Medium)
概述
題目
https://leetcode.com/problems/find-the-longest-semi-repetitive-substring/
找出一個最多出現一次相鄰字元相等的最長字串,若是沒有相鄰字元也成立
心得
週賽做最久、吃最多 bug 才 AC 的題目,原因一開始根本沒把題目讀懂,讀題的時候自動忽略了 consecutive 是相鄰的意思,看測資自行理解成最長只有 2 個相同字元的字串,所以用雙指針做、花了一堆時間,最後才發現根本不是這麼一回事 QQ,後續用記位置的方式 AC
Array
思路
先記下有出現相鄰字元相等的前一個字元位置,再補上首、尾作為參考點,最後兩兩 (中間有空一數,代表真正要相鄰的那組) 相減確認最長字串為何
程式
1 | class Solution(object): |
Complexity
Time Complexity: O(n)
只有掃過 2 次 n 個數
Space Complexity: O(n)
記位置最大要記 n 個
Extend
思路
將每個相鄰相等的字串進行左右展延,最後求最大長度
程式
1 | class Solution(object): |
Complexity
Time Complexity: O(n^2)
只有掃過 n 個數,每次向左、向右延展,可能會做到 n 次,故為 O(n^2)
Space Complexity: O(n)
記位置最大要記 n 個
Two Pointer
思路
透過雙指針來找到符合題意的最長字串
程式
1 | class Solution(object): |
Complexity
Time Complexity: O(n)
只有掃過 n 個數,故為 O(n)
Space Complexity: O(1)
使用常數個額外記憶體空間
此文章版權所有,如有轉載,請註明來自原作者,且未經同意,禁止截取