前往
大廳
主題

LeetCode - 2486. Append Characters to String to Make Subsequence 解題心得

Not In My Back Yard | 2023-10-26 12:00:01 | 巴幣 0 | 人氣 83

題目連結:


題目意譯:
你被給定兩字串 s 和 t,其只由小寫英文字母組成。

回傳使得 t 變成 s 的一個子序列,需要添加到 s 尾端的最少字母數。

一個子序列為一字串其可由另一字串刪除若干個字元或是一個都不刪並維持剩餘字元的相對順序而得來。

限制:
1 ≦ s.length, t.length ≦ 10 ^ 5
s 和 t 只由小寫英文字母組成。



範例測資:
範例 1:
輸入: s = "coaching", t = "coding"
輸出: 4
解釋: 將字元 "ding" 添加到 s 的結尾,因此 s = "coachingding"。
現在 t 是 s 的一個子序列了("coachingding")。
可以證明添加任 3 個字元到 s 的結尾絕對不會使 t 變成 s 的一個子序列。

範例 2:
輸入: s = "abcde", t = "a"
輸出: 0
解釋: t 已經是 s 的一個子序列了("abcde")。

範例 3:
輸入: s = "z", t = "abcde"
輸出: 5
解釋: 將字元 "abcde" 添加到 s 的結尾,因此 s = "zabcde"。
現在 t 是 s 的一個子序列了("zabcde")。
可以證明添加任 4 個字元到 s 的結尾絕對不會使 t 變成 s 的一個子序列。


解題思維:
利用這題前半部的想法——即利用兩個指標 Ps 和 Pt 先判斷 t 是否為 s 的子序列。如果 Pt 最後是超過了 t 的長度,則代表 t 原本就是 s 的子序列,因此直接回傳 0 即可;反之,則代表在 t 中 Pt 最後停留的位置之後(含)都是需要加到 s 的結尾才能使 t 變成子序列,因此回傳 t 的長度減去 Pt 之值即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作