我在接受采访时得到了一个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}
答案 0 :(得分:3)
如果您使用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
****
**
答案 1 :(得分:0)
这是一个好的开始。
接下来我要做的是将HashMap
更改为LinkedHashMap
,以便我们可以维护字符的顺序并添加long
以了解最大次数a角色出现。因此,我会将您当前的代码更改为:
public void myFunction(String str) {
int length = str.length();
long maxOcurrences = 0;
LinkedHashMap<Character, Integer> hm = new LinkedHashMap<>();
for(int i=0;i<length;i++){
char ch = str.charAt(i);
long nextValue;
if(hm.containsKey(ch)){
nextValue = hm.get(ch)+1
hm.put(ch, nextValue);
}
else {
nextValue = 1;
hm.put(ch, nextValue);
}
if(nextValue > maxOcurrences)
{maxOcurrences = nextValue;}
}
System.out.println(hm);
}
接下来,我将通过迭代LinkedHashMap
按顺序打印字符。类似的东西:
for (Map.Entry<Character, Integer> entry : hm.entrySet()) {
System.out.print(entry.getKey());
}
System.out.println();
最后,我会创建一个迭代maxOcurrences
次的循环,并根据需要打印*
。
for(int i = 0; i < maxOcurrences; i++)
{
//Iterate over each character again
for (Map.Entry<Character, Integer> entry : hm.entrySet()) {
if(entry.getValue() > i)
{
//Print Star
System.out.print("*");
}else{
//Print space
System.out.print(" ");
}
System.out.println();
}
}