组成字符串ku的最大次数| 豆包MarsCode AI刷题

95 阅读2分钟

一、问题描述

给定一个字符串 s,该字符串中只包含英文大小写字母。你需要计算从字符串中最多能组成多少个字符串 "ku"。每次可以随机从字符串中选一个字符,并且选中的字符不能再使用。字符串中的字符大小写可以忽略,即大写和小写字母视为相同。

例如,输入 "AUBTMKAxfuu",从中最多能组成 1 个 "ku"


二、测试样例

样例1:

输入:s = "AUBTMKAxfuu"
输出:1

样例2:

输入:s = "KKuuUuUuKKKKkkkkKK"
输出:6

样例3:

输入:s = "abcdefgh"
输出:0


三、思路

用哈希表保存字符对应的数量,并且只有在字符是'k''u'时才保存(不区分大小写),然后找出'k'字符'u'字符的数量的最小值。


四、代码

方法1

public static int solution(String s) {
    char b;
    HashMap<Character, Integer> CountMap = new HashMap<>();
    CountMap.put('k', 0);
    CountMap.put('u', 0);
    for(char a:s.toCharArray()){
        if(a=='k'||a=='K'){
            b='k';
            CountMap.put(b, CountMap.getOrDefault(b, 0) + 1);
        }
        else if(a=='u'||a=='U'){
            b='u';
            CountMap.put(b, CountMap.getOrDefault(b, 0) + 1);
        }
    }
    int minCount = 100;
    for (int count : CountMap.values()) {
        if (count <minCount) {
            minCount = count;
        }
    }
    return minCount;
}

方法2

public static int solution(String s) {
    HashMap<Character, Integer> CountMap = new HashMap<>();
    CountMap.put('k', 0);
    CountMap.put('u', 0);
    String str=s.toLowerCase();
    for(char a:str.toCharArray()){
        if(a=='k'||a=='u'){
            CountMap.put(a, CountMap.getOrDefault(a, 0) + 1);
        }
    }
    int minCount=Math.min(CountMap.getOrDefault('k',0),CountMap.getOrDefault('u',0));
    return minCount;
}

五、代码详解

方法1:用另一个字符b保存大小写的情况

HashMap<Character, Integer> CountMap = new HashMap<>();

以字符为key,整型为value,创建哈希表。

CountMap.put('k', 0); CountMap.put('u', 0);

给哈希表的'k'和'u'初始赋值为0。

for(char a:s.toCharArray()){
    if(a=='k'||a=='K'){
        b='k';
        CountMap.put(b, CountMap.getOrDefault(b, 0) + 1);
    }
    else if(a=='u'||a=='U'){
        b='u';
        CountMap.put(b, CountMap.getOrDefault(b, 0) + 1);
    }
}

用tocharArray()将字符串类型转成字符数组类型,再用for each遍历字符数组。判断a是否是'k'或'u',用b保存大小写的情况,用getOrDefault()获取原本的value值,在此基础上加1。

int minCount = 100;
for (int count : CountMap.values()) {
    if (count <minCount) {
        minCount = count;
    }
}

还是用for each遍历哈希表的value数组,找到字符最小的数量。

方法2:将字符串转成小写的情况

String str=s.toLowerCase();

用toLowerCase()把字符串转成小写。

for(char a:s.toCharArray()){
    if(a=='k'||a=='u'){
        CountMap.put(a, CountMap.getOrDefault(a, 0) + 1);
    }
}

用tocharArray()将字符串类型转成字符数组类型,再用for each遍历字符数组。判断a是否是'k'或'u',用getOrDefault()获取原本的value值,在此基础上加1。

int minCount=Math.min(CountMap.getOrDefault('k',0),CountMap.getOrDefault('u',0));

用getOrDefault()获取k和u的value值,用Math.min()找出两个字符的数量最小值。


六、函数的使用

  • 哈希表的创建
  • 字符串转换成字符数组
  • 哈希表的添加
  • 哈希表获取key对应的value值
  • 哈希表获取value数组
  • 字符串转成小写字符串