1. 程式人生 > 其它 >5890. 轉換字串的最少操作次數

5890. 轉換字串的最少操作次數

題目

給你一個字串 s ,由 n 個字元組成,每個字元不是 'X' 就是 'O' 。

一次 操作 定義為從 s 中選出 三個連續字元 並將選中的每個字元都轉換為 'O' 。注意,如果字元已經是 'O' ,只需要保持 不變 。

返回將 s 中所有字元均轉換為 'O' 需要執行的最少操作次數。

示例 1:

輸入:s = "XXX"
輸出:1
解釋:XXX -> OOO
一次操作,選中全部 3 個字元,並將它們轉換為 'O' 。

示例 2:

輸入:s = "XXOX"
輸出:2
解釋:XXOX -> OOOX -> OOOO
第一次操作,選擇前 3 個字元,並將這些字元轉換為 'O' 。
然後,選中後 3 個字元,並執行轉換。最終得到的字串全由字元 'O' 組成。

示例 3:

輸入:s = "OOOO"
輸出:0
解釋:s 中不存在需要轉換的 'X' 。

提示:

3 <= s.length <= 1000
s[i] 為 'X' 或 'O'

簡單遍歷

這道題難度標籤為easy,也的確很容易,但在周賽上把問題想複雜了沒做出來,最後時間結束了才用動態規劃做出來,所以記錄一下。方法是一遇到'X'就將當前位置開始的3個位置轉換為'O'並且計數加一。那麼為什麼這樣的轉換次數就一定最小呢?周賽時就是這個問題沒想明白。其實很簡單,從前到後遍歷如果遇到'X'則說明它前面都是'O',前面部分沒有轉換必要,因此要保證轉換次數最小就要轉換以當前位置開始的3個字元。

   public int minimumMoves(String s) {
        int cnt=0;
        for(int i=0;i<s.length();){
            if(s.charAt(i)=='X'){
                cnt++;
                i+=3;
            }
            else i++;
        }
        return cnt;
    }

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/minimum-moves-to-convert-string


著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。