試題:
對於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]));
}
}