我在面试中被问到一个 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/