Skip to main content

Subsequence with Min Score

` LC 2565 You are given two strings s and t.

You are allowed to remove any number of characters from the string t.

The score string is 0 if no characters are removed from the string t, otherwise:

Let left be the minimum index among all removed characters.
Let right be the maximum index among all removed characters.

Then the score of the string is right - left + 1.

Return the minimum possible score to make t a subsequence of s.

A subsequence of a string is a new string that is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (i.e., "ace" is a subsequence of "abcde" while "aec" is not).

Example 1:

Input: s = "abacaba", t = "bzaa" Output: 1 Explanation: In this example, we remove the character "z" at index 1 (0-indexed). The string t becomes "baa" which is a subsequence of the string "abacaba" and the score is 1 - 1 + 1 = 1. It can be proven that 1 is the minimum score that we can achieve.

Example 2:

Input: s = "cde", t = "xyz" Output: 3 Explanation: In this example, we remove characters "x", "y" and "z" at indices 0, 1, and 2 (0-indexed). The string t becomes "" which is a subsequence of the string "cde" and the score is 2 - 0 + 1 = 3. It can be proven that 3 is the minimum score that we can achieve.

`

` func minimumScore(s string, t string) int { suffix :=make([]int,len(s)) j := len(t)-1 for i:=len(s)-1;i>=0;i--{ if 0 <= j && s[i] == t[j]{ j-- } suffix[i] = j } answer := j + 1 j = 0 for i,_ := range(s){ answer = min(answer, max(0, suffix[i] - j + 1)) if j < len(t) && s[i] == t[j]{ j++ } } return min(answer, len(t)-j) }

func min(a,b int) int{ if a<b{ return a } return b }

func max(a,b int) int{ if a>b{ return a } return b } `