题目大意:输入 n 个字符串,仅包含大小写字母,问你最少需要多少步打完这个字符串。
解题思路:运用 dp 的思想,判断大写字母和小写字母。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int T,l,dp[110][2]; 4 string str; 5 int main(void) 6 { 7 scanf("%d",&T); 8 while(T--) 9 { 10 cin>>str; 11 l=str.size(); 12 memset(dp,0x3f,sizeof(dp));//初始化 dp 数组 13 dp[0][0]=0,dp[0][1]=1;//dp[0][0] 代表没有按下 capslock,dp[0][1] 代表按下了 capslock 14 for(int i=1;i<=l;i++) 15 { 16 if(str[i-1]>='A' && str[i-1]<='Z')//如果是大写字母 17 { 18 dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+1);//当前有两种情况,一种是上一个没按 capslock 加上 2,因为要按下 capslock,另一种是上一个就按下了 capslock 所以就只用加上 1 19 dp[i][0]=min(dp[i-1][1]+2,dp[i-1][0]+2);//同上所述,只不过变成没开 capslock 20 } 21 else//如果是小写字母 22 { 23 dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+2);//同上所述,开了 capslock 只不过要变成小写字母 24 dp[i][0]=min(dp[i-1][1]+2,dp[i-1][0]+1);//同上所述,没开 capslock 25 } 26 } 27 printf("%d\n",min(dp[l][1]+1,dp[l][0]));//取这两种情况中按键盘次数最少的 28 } 29 }