Leetcode 821. 字符的最短距離

題目表述
難度:簡單

給定一個(gè)字符串 S 和一個(gè)字符 C。返回一個(gè)代表字符串 S 中每個(gè)字符到字符串 S 中的字符 C 的最短距離的數(shù)組。

樸素解法

  1. 遍歷S,找到所有 C 的位置索引;
  2. 遍歷S,找到同所有 C 的位置索引的距離,取最小值;

復(fù)雜度為 O(n^2)

python 描述

class Solution:
    def shortestToChar(self, S: str, C: str) -> List[int]:
        index = [i for i in range(len(S)) if S[i] is C]
        
        if len(index) > 0:
            return [min([abs(i-j)  for j in index ])for i in range(len(S))]
        else:
            return [float('inf') for i in S]

雙指針解法

  1. 設(shè)置 right、left 指針;
  2. right 前進(jìn),同時(shí)更新 right 與 C 的位置;
  3. right 遇到 C 停下,等 left 指針追上 right,同時(shí)更新 left 與 C 的位置;
  4. 重復(fù) 2、3 直到 right 到達(dá) S 末尾;

復(fù)雜度為 O(n)

python 描述

class Solution:
    def shortestToChar(self, S: str, C: str) -> List[int]:
        left = 0
        result = [float('inf') for i in S]

        for right in range(0, len(S)):
            if S[right] is C:
                for i in range(left, right + 1):
                    result[i] = min(result[i], right - i)
                left = right
            elif S[left] is C:
                result[right] = min(result[right], right - left)

        return result
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容