質問:
Aについては、入力のために+ A 2ウェイタップをシフトすることができ、キャップロックがケースをロックするために使用されてもよいし、タップA、タップ2が実装。キャップはロックケースは、シフト+ Aは、小文字の入力によって実現されてもよいことに留意されたいです。正しい入力を達成するために、少なくともどのように多くのタップ、与えられた文字列のケースの下に解決しました。
コード:
DPアイデアが、それは現在のケースで維持する必要がある、入力状態は、大文字と小文字の入力状態が2回、最低タップです。
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]));
}
}