1 //方法很好,利用Caps键是开或关的状态,分别dp两个数组a与b
2 #include <iostream>
3 #include <string.h>
4 using namespace std;
5
6 int minNum(int a,int b){
7 return a<b?a:b;
8 }
9 int main(){
10 freopen("in.txt","r",stdin);
11 int i,j,cas;
12 char name[110];
13 int a[110],b[110];//Caps关 与 开
14 cin>>cas;
15 while (cas--){
16 scanf("%s",name);
17 memset(a,0,sizeof(a));
18 memset(b,0,sizeof(b));
19 int len=strlen(name);
20 b[0]=1;
21 for(i=1,j=0;i<=len;i++,j++){
22 if(name[j]>='a'&&name[j]<='z'){//小写字母时
23 a[i]=minNum(a[i-1]+1,b[i-1]+2);
24 b[i]=minNum(a[i-1]+2,b[i-1]+2);
25 }
26 else{//大写字母时
27 a[i]=minNum(a[i-1]+2,b[i-1]+2);//写完第i个字母 Caps键关状态
28 b[i]=minNum(a[i-1]+2,b[i-1]+1);//写完第i个字母 Caps键开状态
29 }
30 }
31 b[len]++;
32 printf("%d\n",a[len]<b[len]?a[len]:b[len]);
33 }
34 return 0;
35 }
36
posted on 2012-07-07 10:19
Leo.W 阅读(93)
评论(0) 编辑 收藏 引用