java - 在java中打印字符串字符下的星号(*)

标签 java string collections hashmap

我在面试中被问到一个 java 问题。打印字符串中的不同字符,并在每个字符下方打印星号 (*),表示该字符在该字符串中重复了多少次。

例如:我的字符串是“GOOGLE”,那么输出应该是

G O L E
* * * *
* *

我在 java 中尝试过,我能够创建一个 HashMap,它将在字符串中存储字符和重复次数。但是 HashMap 并不是基于字符串的 Insertion 顺序。我也不知道下一步应该做什么。有人能帮我吗?提前致谢

public void myFunction(String str) {
    int length = str.length();
    HashMap<Character, Integer> hm = new HashMap<>();
    for(int i=0;i<length;i++){
        char ch = str.charAt(i);
        if(hm.containsKey(ch)){
            hm.put(ch, hm.get(ch)+1);               
        }
        else {
            hm.put(ch, 1);
        }


    }
        System.out.println(hm);
}

OUTPUT - Enter a String: 
GOOGLE
{E=1, G=2, L=1, O=2}

最佳答案

如果您使用 LinkedHashMap,它将保持插入顺序。你可以这样做。还要添加一个 max 变量,因为我们稍后在打印时需要它。

String input = "GOOGLE";
int max = 0;
LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();
for (char c: input.toCharArray()){
    if (map.containsKey(c)){
        map.put(c, map.get(c) + 1);
    }else{
        map.put(c, 1);
    }
    max = Math.max(max, map.get(c));
}
System.out.println(map);

输出:

{G=2, O=2, L=1, E=1}

然后只需遍历您必须打印多少行并遍历每个字符。这样的事情应该可以解决问题。

for (int i=0; i<=max; i++){
    for (char c: map.keySet()){
        if (i==0){
            System.out.print(c);
        }else if (i<= map.get(c)){
            System.out.print("*");
        }else{
            System.out.print(" ");
        }
    }
    System.out.println();
}

输出:

GOLE
****
** 

关于java - 在java中打印字符串字符下的星号(*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32910583/

相关文章:

java - Docker 未捕获环境变量

java - 在两个设备之间同步RecyclerView数据?

javascript - 从字符串转换为数字,但仅转换为有效整数的字符串

python - 如何找到计数器的第二个最大值 - Python

java - 如何根据学生的分数对学生姓名进行排序?

java - 在java中使用oauth调用Linkedin api

java - 为什么这些字符串不匹配?

php - 在PHP中将整数转换为X个字符串

java - 如何检查数组中是否有重复的数字?

.net - COM Interop 的泛型集合有哪些替代方案?