打印具有最多重复字符集的子字符串

时间:2018-01-03 12:14:26

标签: java algorithm

例如1:如果我有像这样的数字 1 2 3 4 1 3 4 5 6 1 4 5 6 2 1 2

它应该打印1 2 3 4 1 3 4 5 6 1 4 5 6 2 1,因为1来了4次

例如2:2 3 4 2 2 1 3 4 5 6 7

它应该打印2 3 4 2 2因为它有最大值

我知道我们必须找到最大出现位的基本方法,然后我们必须在输入数组中搜索该数字的开始和最后一个索引并打印它。

如果可能,我想要任何其他更好的方法。

1 个答案:

答案 0 :(得分:2)

  • 对于字符串中的每个字符,保持计数,以及Map<Character,FirstAndLast>中第一次和最后一次出现的索引(见下文)
  • 地图完成后,浏览其值,然后选择一个count最高的地图;选择解决关系的策略
  • 获取firstlast之间的子字符串,包含最大count的值。

FirstAndLast是一个表示一对整数的简单对象:

class FirstAndLast {
    private int first, last, count;
    public FirstAndLast(int index) { first = last = index; count = 1;}
    public int getFirst() { return first; }
    public int getLast() { return last; }
    public int getCount() { return count; }
    public void setFirst(int index) { first = index; }
    public void setLast(int index) { last = index; }
    public void incrementCount() { count++; }
}