美团 键盘大小写转换 最小敲击次数

试题:
对于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]));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章