试题:
对于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]));
}
}