Java 将所有大写字符放在所有小写字符之前所需的最小操作数
给定一个包含大写和小写字母的字符串’str’。任何小写字符都可以转换为大写字符,反之亦然,在一次操作中进行。目标是打印出产生一个包含至少一个小写字符和至少一个大写字符的字符串所需的最少操作实例。
输入输出方案
第一个可行的解决方案:前4个字符可以转换为大写字符,即“TUTORial”,需要4个操作。
输入
str = “tutoRial”
输出
1
第二个可能的解决方案:第三个字符可以转换为小写字符,即通过一个操作将“tutorial”变为“tuTorial”。
输入
str = “point”
输出
0
字符串已经处于指定的格式。
有两种可能的结果:
- 字符串的小写字符应该通过确定最后一个大写字符的索引来转换为大写字符。
-
或者,获取字符串中第一个小写字符的索引,并将其后的所有大写字母转换为小写字母。
选择任务可能最少的情况。
Java实现
让我们来看看这种方法的Java实现:
示例
public class Main {
public static int minOperationsLower(String str, int n) {
// Store the indices of the last uppercase character and the first lowercase character
int i, lastUpperCase = -1, firstLowerCase = -1;
for (i = n - 1; i >= 0; i--) { //finding uppercase
if (Character.isUpperCase(str.charAt(i))) {
lastUpperCase = i;
break;
}
}
for (i = 0; i < n; i++) { //finding lowercase
if (Character.isLowerCase(str.charAt(i))) {
firstLowerCase = i;
break;
}
}
if (lastUpperCase == -1 || firstLowerCase == -1)
return 0;
// Counting of uppercase characters that appear after the first lowercase character
int countUpperCase = 0;
for (i = firstLowerCase; i < n; i++) {
if (Character.isUpperCase(str.charAt(i))) {
countUpperCase++;
}
}
// Count of lowercase characters that appear before the last uppercase character
int countLowerCase = 0;
for (i = 0; i < lastUpperCase; i++) {
if (Character.isLowerCase(str.charAt(i))) {
countLowerCase++;
}
}
// Return the minimum operations required
return Math.min(countLowerCase, countUpperCase);
}
// main method
public static void main(String args[]) {
String str = "tutoRIalsPoinT";
int n = str.length();
System.out.println("Operations Required: "+minOperationsLower(str, n));
}
}
输出
Operations Required: 4
时间复杂度:O(N),其中N是字符串的长度
空间复杂度:O(1),没有使用额外的空间。