Skip to content

Commit

Permalink
Update Readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
wisdompeak authored Jun 26, 2021
1 parent d4f9088 commit e9880c7
Showing 1 changed file with 1 addition and 3 deletions.
4 changes: 1 addition & 3 deletions Greedy/1055.Shortest-Way-to-Form-String/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

本题的最优策略就是贪心。我们总试图在source里找到一个subsequence去匹配target的前几个字符。匹配完若干个字符后,就从头再在source里找subsequence去匹配target的接下来的几个字符。直至把target全部匹配完,或者source完全无法提供匹配。

这样的解法有多种多样,但最优的写法可以做到o(N)级别。
这样的解法有多种多样,但最优的写法类似792,采用状态机可以做到o(N)级别。

我们预先用o(26N)的时间来处理source。我们构建next[i][k]表示在source的第i个位置的下一个字符k在哪个位置。注意为了方便起见,我们将source调整为1-index。如果i的位置后面没有字符k,则令next[i][k]=-1.

Expand All @@ -12,6 +12,4 @@ j = next[j][target[i]];
```
注意,如果此时j=-1,表示我们已经搜完了一遍source但是没有找到匹配target[i],此时需要重置j=0再在source中搜一轮。如果j!=-1,那么说明target[i]已经找到,可以i+=1.

特别注意,当i前进至target.size()时,意味着轮数需要额外增加1.

最终统计我们在source里面搜过了几轮,就是需要几个source的subsequence来拼接成target。

0 comments on commit e9880c7

Please sign in to comment.