题解
输入一段含大小写的字符串,求怎么输入使得按键次数最少,因为切换大小写的方式有多种
capslock锁定下 1.按下shift 再按字母 即为小写
2.按字母,为大写
关闭状态下
1.按下shift 再按字母 即为大写
2.按字母,为小写
ps 连续输入大写字母在使用shift建下算两次
最后最小值在capslock键打开状态下取的话需+1
分类讨论下就可以知道递推公式
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<vector>
#include<string>
#include<map>
#include<queue>
#include<set>
#include<algorithm>
using namespace std;
typedef long long ll;
char s[105];
int d[105][2];
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s",s+1);
int len=strlen(s+1);
memset(d,0,sizeof(d));
d[0][1]=1;
for(int i=1;i<=len;i++){
if(isupper(s[i])){
d[i][1]=min(d[i-1][1]+1,d[i-1][0]+2);
d[i][0]=min(d[i-1][0]+2,d[i-1][1]+2);
}else{
d[i][1]=min(d[i-1][1]+2,d[i-1][0]+2);
d[i][0]=min(d[i-1][0]+1,d[i-1][1]+2);
}
}
int mi=min(d[len][1],d[len][0]);
if(mi==d[len][1]&&mi!=d[len][0])
mi++;
printf("%d\n",mi);
}
return 0;
}