題目連結:
題目意譯:
你被給定一個字串 s,其只由字母 'a' 和 'b' 所組成。在一步之中你可以從 s 中移除一個迴文子序列。
回傳將給定字串變成空字串最少所需步數。
一個字串為給定字串的一個子序列,代表著其是由刪除給定字串中若干個字元且不更動剩餘字元的相對順序。注意到一個子序列不需要是連續的。
一個字串如果從左至右讀與從右至左讀都一樣的話,則其為一迴文。
限制:
1 ≦ s.length ≦ 1000
s[i] 只會是 'a' 或是 'b'。
範例測資:
範例 1:
輸入: s = "ababa"
輸出: 1
解釋: s 已經是一個迴文,所以它整個可以在一步中被移除。
範例 2:
輸入: s = "abb"
輸出: 2
解釋: "abb" -> "bb" -> ""。
移除迴文子序列 "a",接著是 "bb"。
範例 3:
輸入: s = "baabb"
輸出: 2
解釋: "baabb" -> "b" -> ""。
移除迴文子序列 "baab",接著是 "b"。
解題思維:
由於我們可以移除的是「子序列」而不是「子字串」,再加上 s 只有兩種字元 'a' 和 'b'。因此如果 s 本身是一個迴文,則我們只需要移除 s 本身一次;而反之 s 不是迴文,則我們只需要一次移除所有的 'a'、再一次移除所有的 'b',總計兩次操作即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。