Я пытаюсь найти второй по частоте символ в строке. ниже мой код
public class secondCommonAlpha {
public Character secondCommon(String str)
{
Character ans = null;
int first = 0, second = 0;
HashMap<Character,Integer> counter = new HashMap<>();
for(char c: str.toCharArray())
{
if(!counter.containsKey(c))
{
counter.put(c,1);
}
else
{
counter.put(c,counter.get(c) + 1);
}
}
System.out.println(counter);
for (char c: counter.keySet())
{
if(counter.get(c) > first)
{
second = first;
first = counter.get(c);
}
else
if(counter.get(c) > second && counter.get(c) < first)
{
second = counter.get(c);
ans = c;
}
}
return ans;
}
public static void main(String[] args) {
secondCommonAlpha o = new secondCommonAlpha();
System.out.println(o.secondCommon("bananassss"));
}
}
не работает в третьей итерации. Как я могу исправить и оптимизировать этот код?
EDIT
Я использовал две символьные переменные, чтобы выполнить работу.
public Character secondCommon(String str)
{
Character ans = null;
int first = 0, second = 0;
Character firstChar = null,secondChar = null;
HashMap<Character,Integer> counter = new HashMap<>();
for(char c: str.toCharArray())
{
if(!counter.containsKey(c))
{
counter.put(c,1);
}
else
{
counter.put(c,counter.get(c) + 1);
}
}
System.out.println(counter);
for (char c: counter.keySet())
{
if(counter.get(c) > first)
{
second = first;
secondChar = firstChar;
firstChar = c;
first = counter.get(c);
}
else
if(counter.get(c) > second && counter.get(c) < first)
{
second = counter.get(c);
secondChar = c;
}
}
return secondChar;
}
сейчас работает нормально, но я думаю, этот код можно оптимизировать.