题目描述
小明很喜欢打字,今天小红给了小明一个字符串。这个字符串只包含大写和小写字母。 我们知道,按下CapsLock键,可以切换大小写模式。我们在小写模式时候,同时按下shift+字母键,就能写出大写字母。在大写模式的时候,按下shift+字母键,就能写出小写字母。现在问题来了,给你一个字符串,问你最少使用多少个按键,就可以写出这个字符串呢?注意,按shift和字母键,算两次按键。开始时均为小写状态。
输入描述
第一行一个T,表示有T组输入。
接下来T组数据:
每组数据一个字符串s,s的长度小于等于100。仅包含大小写字母。
输出描述
对于每组数据,输出最少按键次数。
样例输入
3
A
AA
AAAAAA
样例输出
2
3
7
解题思路
- 用变量small表示键入当前字符后并保持输入状态为小写字母,所需的最小次数。若当前字符为大写,则新的small应从(旧的small + 1次shift键 + 1次字母键)和(旧的big + 1次CapsLock键 + 1次字母键)中取较小值。其他情况依次类推。
- 用变量big表示键入当前字符后并保持输入状态为大写字母,所需的最小次数。
代码
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
for (int i = 0; i < n; i++) {
String str = sc.nextLine();
int len = str.length();
//初始状态为小写字母,故big为1
int small = 0, big = 1;
for (int j = 0; j < len; j++) {
char c = str.charAt(j);
if (c >= 'A' && c <= 'Z') {
int val1 = Math.min(small + 2, big + 2);
int val2 = Math.min(small + 2, big + 1);
small = val1;
big = val2;
}
else {
int val1 = Math.min(small + 1, big + 2);
int val2 = Math.min(small + 2, big + 2);
small = val1;
big = val2;
}
}
System.out.println(Math.min(small, big));
}
}
}
标签:int,Java,--,big,小写字母,赛码,字母键,shift,small
From: https://www.cnblogs.com/mqDliaolei/p/17734143.html