赛码网编程题--打字(Java全A)

题目描述
小明很喜欢打字,今天小红给了小明一个字符串。这个字符串只包含大写和小写字母。 我们知道,按下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));
    }
  }
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值