题目大意

给出一个长度为n,且仅包含大小写字母的字符串,必须使用完k次变换(将大写变为小写,小写变为大写),求变换后大写字母最多有多少个

解题思路

贪心

1.对给定字符串先计算分别有多少个大、小写字母

2.对比k次和小写字母个数哪个更小(如果k小,则最多变换k个小写字母,如果小写字母小,那么最多只能将所有的小写字母转换成大写字母),用变量将其中的较小值记录

3.大写字母个数加较小值,k次减去较小值

4.如果k次还有剩,判断k是否为奇数(如果k有多的情况,那么肯定是小写字母全都转换成大写字母了,大写字母转奇数次是小写字母,偶数次还是大写字母)

代码

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
		Scanner reader = new Scanner(System.in);

		int n = reader.nextInt();
		int k = reader.nextInt();
		reader.nextLine();
		String line = reader.nextLine();
		char[] chs = line.toCharArray();

		int upperCase = 0;
		for (char ch : chs) {
			if (Character.isUpperCase(ch)) {
				upperCase++;
			}
		}
		int smallCase = n - upperCase;
		int convert = Math.min(k, smallCase);
		upperCase += convert;
		k -= convert;

		if (k > 0) {
			upperCase -= k % 2;
		}
		System.out.println(upperCase);
		reader.close();
	}
}