美團 鍵盤大小寫轉換 最小敲擊次數

試題:
對於A,可以使用shift+A方式2次敲擊實現輸入;也可以使用caps lock先鎖定大小寫,然後再敲擊A,2次敲擊實現。注意大寫鎖定情況下,按shift + A可以實現小寫a的輸入。求解,給定字符串情況下,至少需要多少次敲擊才能實現正確輸入。
代碼:
dp思想,不過需要維持在當前情況下,輸入狀態爲大寫和輸入狀態爲小寫的兩個最小敲擊次數。

import java.util.*;

public class Main{
    public static void main(String[] args){
        String str = "AaAAAA";  //輸出應該是8次敲擊次數
        int N = str.length();
        int[][] dp = new int[N+1][2];
        dp[0][0] = 1;  // 大小狀態
        dp[0][1] = 0;  // 小寫狀態
        for(int i = 1; i <= N; i++){
            char c = str.charAt(i-1);
            if(c >= 'A' && c <= 'Z'){
                dp[i][0] = Math.min(dp[i-1][0]+1, dp[i-1][1]+2);
                dp[i][1] = Math.min(dp[i-1][0]+2, dp[i-1][1]+2);
            }
            if(c >= 'a' && c <= 'z'){
                dp[i][0] = Math.min(dp[i-1][0]+2, dp[i-1][1]+2);
                dp[i][1] = Math.min(dp[i-1][0]+2, dp[i-1][1]+1);
            }
        }
        System.out.println(Math.min(dp[N][0],dp[N][1]));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章