考虑三种情况分别需要的操作次数,取最小值即可
第一种情况操作次数:字符串中的大写字母数量
第二种情况操作次数:字符串中的小写字母数量
第三种情况操作次数:字符串中第一个字符是否为大写,以及后面字符串中的小写字母数量
C++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
cin >> s;
int l = 0, r = 0;
for (char val : s) {
if (isupper(val)) {
l += 1;
} else {
r += 1;
}
}
int n = s.size();
int res = min(n - l, n - r);
if (isupper(s[0])) {
res = min(res, n - 1 - r);
} else {
res = min(res, 1 + n - 1 - l);
}
cout << res << endl;
return 0;
}
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
int l = 0, r = 0;
for (char val : s.toCharArray()) {
if (Character.isUpperCase(val)) {
l += 1;
} else {
r += 1;
}
}
int n = s.length();
int res = Math.min(n - l, n - r);
if (Character.isUpperCase(s.charAt(0))) {
res = Math.min(res, n - 1 - r);
} else {
res = Math.min(res, 1 + n - 1 - l);
}
System.out.println(res);
}
}
Python
s = input()
l = r = 0
for val in s:
if val.isupper():
l += 1
else:
r += 1
n = len(s)
res = min(n - l, n - r)
if s[0].isupper():
res = min(res, n - 1 - r)
else:
res = min(res, 1 + n - 1 - l)
print(res)
小美定义以下三种单词是合法的: 1.所有字母都是小写。例如:good
2.所有字母都是大写。例如:APP 3.第一个字母大写,后面所有字母都是小写。例如:Alice
现在小美拿到了一个单词,她每次操作可以修改任意一个字符的大小写。小美想知道最少操作几次可以使得单词变成合法的?
一个仅由大写字母和小写字母组成的字符串,长度不超过105
一个整数,代表操作的最小次数。
输入
AbC
输出
1
说明
变成 ABC 或者 Abc 均可。只需要1次操作。