題目
給你一個只包含字元 'a','b' 和 'c' 的字串 s ,你可以執行下面這個操作(5 個步驟)任意次:
選擇字串 s 一個 非空 的字首,這個字首的所有字元都相同。
選擇字串 s 一個 非空 的字尾,這個字尾的所有字元都相同。
字首和字尾在字串中任意位置都不能有交集。
字首和字尾包含的所有字元都要相同。
請你返回對字串 s 執行上面操作任意次以後(可能 0 次),能得到的 最短長度 。
示例 1:輸入:s = "ca" 輸出:2
示例 2:輸入:s = "cabaabac" 輸出:0
解釋:最優操作序列為:
示例 3:輸入:s = "aabccabba" 輸出:3
解釋:最優操作序列為:
提示:1 <= s.length <= 105
s 只包含字元 'a','b' 和 'c' 。
解題思路分析1、內建函式;時間複雜度O(n),空間複雜度O(n)
func minimumLength(s string) int { for len(s) > 0 { if s[0] == s[len(s)-1] && len(s) != 1 { temp := string(s[0]) s = strings.TrimLeft(s, temp) s = strings.TrimRight(s, temp) } else { break } } return len(s)}
2、雙指標;時間複雜度O(n),空間複雜度O(1)
func minimumLength(s string) int { left, right := 0, len(s)-1 for left < right { if s[left] != s[right] { break } temp := s[left] for left <= right && s[left] == temp { left++ } for left <= right && s[right] == temp { right-- } } return right - left + 1}
總結Medium題目,題目比較簡單,可以使用雙指標,也可以使用內建函式
最新評論