a[i] 与 b[i] 分别表示 输出完第i个 是大写时的最小按键数 与 是小写时的最小按键数
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
bool judge( char c ){
return ( c >= 'A' && c <= 'Z' );
}
int main(){
int a[110], b[110];
int T;
string s;
cin >> T;
while( T-- ){
cin >> s;
memset( a, 0, sizeof( a ) );
memset( b, 0, sizeof( b ) );
if( judge( s[0] ) ){
a[0] = 2;
b[0] = 2;
}else{
a[0] = 2;
b[0] = 1;
}
for( int i = 1; i < s.size(); i++ ){
if( judge( s[i] ) ){
a[i] = min( a[i-1] + 1, b[i-1] + 2 );
b[i] = min( a[i-1] + 2, b[i-1] + 2 );
}else{
a[i] = min( a[i-1] + 2, b[i-1] + 2 );
b[i] = min( a[i-1] + 2, b[i-1] + 1 );
}
}
int ans;
int i = s.size() - 1;
ans = min( a[i] + 1, b[i] );
cout << ans << endl;
}
return 0;
}