Java 将所有大写字符放在所有小写字符之前所需的最小操作数

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),没有使用额外的空间。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程