找出字符串中出現(xiàn)次數(shù)最多的字符和次數(shù)

題目:找出字符串中出現(xiàn)次數(shù)最多的字符和次數(shù)雾袱。
例如:“abbcdaaca”中出現(xiàn)次數(shù)最多的字符就是a械巡,出現(xiàn)次數(shù)是4

思路

由于需要找出字符和次數(shù)刹淌,這里可以利用Map鍵值對(duì)的形式來(lái)存儲(chǔ)饶氏,先通過(guò)遍歷字符串并比較字符,如果Map中已經(jīng)存在該字符就修改相對(duì)應(yīng)的value值芦鳍,也就是每次發(fā)現(xiàn)相同的字符就value++嚷往,這樣就得出了字符串中所有字符以及相對(duì)應(yīng)出現(xiàn)的次數(shù)的鍵值對(duì)對(duì)象。最后通過(guò)遍歷Map和比較找出出現(xiàn)次數(shù)最多的字符即可柠衅。

 HashMap<Character,Integer> map = new HashMap<Character,Integer> ();
//獲取到字符串的字符和出現(xiàn)的次數(shù)的鍵值對(duì)對(duì)象
        for(int i=0;i<str.length();i++)
        {
            char temp = str.charAt(i);
            if(map.containsKey(temp))
            {
                map.put(temp,map.get(temp)+1);//如果map中已經(jīng)存在就重新改變對(duì)應(yīng)的value值+1
            }
            else
            {
                map.put(temp,1);
            }
        }

獲取到Map對(duì)象通過(guò)遍歷比較找出出現(xiàn)次數(shù)最對(duì)的鍵值對(duì)

 int count = 0;
 Character temp = null;
 for (Map.Entry<Character,Integer> entry:map.entrySet()
             ) {

          if(entry.getValue()>count)
          {
                count = entry.getValue();
                temp = entry.getKey();  
          }
}
 System.out.println("出現(xiàn)最多次的字符是:"+temp);
 System.out.println("出現(xiàn)次數(shù):"+count);

有個(gè)問(wèn)題要解決

如果字符串是“aaaabbbbcc”皮仁,出現(xiàn)次數(shù)相同并且都是最多的那怎么辦呢?
這里我覺(jué)得可以再創(chuàng)建一個(gè)teamMap來(lái)存放出現(xiàn)次數(shù)最多有多個(gè)的情況菲宴,然后每次返回結(jié)果前就去看teamMap是否存在兩個(gè)或多于兩個(gè)的情況贷祈,存在的話(huà)就都打印出來(lái)。

         int count = 0;
         Character temp = null;
          //存放臨時(shí)結(jié)果的map
         HashMap<Character,Integer> tempMap = new HashMap<Character, Integer>();
       for (Map.Entry<Character,Integer> entry:map.entrySet()
             ) {

            if(entry.getValue()>count&&tempMap.isEmpty())
            {
                count = entry.getValue();
                temp = entry.getKey();
                tempMap.put(temp,count);
            }
            else if (entry.getValue()>count&&!tempMap.isEmpty())
            {
                tempMap.clear();//存在次數(shù)更多的字符喝峦,直接清空之前的元素
                count = entry.getValue();
                temp = entry.getKey();
                tempMap.put(entry.getKey(),entry.getValue());
            }
            else if(entry.getValue()==count)
            {
                tempMap.put(entry.getKey(),entry.getValue());
            }


        }
        if(tempMap.size()>1)
        {

            System.out.println("出現(xiàn)最多次數(shù)的字符有多個(gè)法势誊,分別是:");
            for (Map.Entry<Character,Integer>entry:tempMap.entrySet()
                 ) {
                System.out.println(entry.getKey());
            }
        }
        else
        {
            System.out.println("出現(xiàn)最多次的字符是:"+temp);
        }

完整代碼

public static void getMaxTimeChar(String str)
    {
        HashMap<Character,Integer> map = new HashMap<Character,Integer> ();

        //獲取到字符串的字符和出現(xiàn)的次數(shù)的鍵值對(duì)對(duì)象
        for(int i=0;i<str.length();i++)
        {
            char temp = str.charAt(i);
            if(map.containsKey(temp))
            {
                map.put(temp,map.get(temp)+1);//如果map中已經(jīng)存在就重新改變對(duì)應(yīng)的value值+1
            }
            else
            {
                map.put(temp,1);
            }
        }

        int count = 0;
        Character temp = null;
        HashMap<Character,Integer> tempMap = new HashMap<Character, Integer>();
        for (Map.Entry<Character,Integer> entry:map.entrySet()
                ) {

           /* System.out.println(entry.getKey());
            System.out.println(entry.getValue());*/

            if(entry.getValue()>count&&tempMap.isEmpty())
            {
                count = entry.getValue();
                temp = entry.getKey();
                tempMap.put(temp,count);
            }
            else if (entry.getValue()>count&&!tempMap.isEmpty())
            {
                tempMap.clear();
                count = entry.getValue();
                temp = entry.getKey();
                tempMap.put(entry.getKey(),entry.getValue());
            }
            else if(entry.getValue()==count)
            {
                tempMap.put(entry.getKey(),entry.getValue());
            }


        }
        if(tempMap.size()>1)
        {

            System.out.println("出現(xiàn)最多次數(shù)的字符有多個(gè),分別是:");
            for (Map.Entry<Character,Integer>entry:tempMap.entrySet()
                    ) {
                System.out.println(entry.getKey());
            }
            System.out.println("出現(xiàn)次數(shù)是:"+count);
        }
        else
        {
            System.out.println("出現(xiàn)最多次的字符是:"+temp+">>>>>>>>出現(xiàn)次數(shù):"+count);

        }
    }

引申:如果要找出第二多字符怎么實(shí)現(xiàn)呢谣蠢?

無(wú)外乎就是在遍歷的時(shí)候再多進(jìn)行一次比較粟耻,可以分別創(chuàng)建最大和第二的兩個(gè)變量來(lái)存儲(chǔ),然后在比較的時(shí)候再增加一層else if.

    int maxCount = 0
    Character maxChar= null;
    int secCount = 0;
    Character secChar= null;
    if(entry.getValue>maxCount)
    {
        maxCount = entry.getValue();
        maxChar = entry.getKey();
    }else if(entry.getValue>secCount)
    {
        secCount  = entry.getValue();
        secChar = entry.getKey();
    }

上次面試的時(shí)候被問(wèn)到了眉踱,所以在這里做個(gè)記錄挤忙。加油。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谈喳,一起剝皮案震驚了整個(gè)濱河市册烈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婿禽,老刑警劉巖赏僧,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扭倾,居然都是意外死亡淀零,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)膛壹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窑滞,“玉大人,你說(shuō)我怎么就攤上這事恢筝“溃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵撬槽,是天一觀(guān)的道長(zhǎng)此改。 經(jīng)常有香客問(wèn)我,道長(zhǎng)侄柔,這世上最難降的妖魔是什么共啃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任占调,我火速辦了婚禮,結(jié)果婚禮上移剪,老公的妹妹穿的比我還像新娘究珊。我一直安慰自己,他們只是感情好纵苛,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布剿涮。 她就那樣靜靜地躺著,像睡著了一般攻人。 火紅的嫁衣襯著肌膚如雪取试。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天怀吻,我揣著相機(jī)與錄音瞬浓,去河邊找鬼。 笑死蓬坡,一個(gè)胖子當(dāng)著我的面吹牛猿棉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屑咳,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼萨赁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了乔宿?” 一聲冷哼從身側(cè)響起位迂,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤访雪,失蹤者是張志新(化名)和其女友劉穎详瑞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體臣缀,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坝橡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了精置。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片计寇。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脂倦,靈堂內(nèi)的尸體忽然破棺而出番宁,到底是詐尸還是另有隱情,我是刑警寧澤赖阻,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布蝶押,位于F島的核電站,受9級(jí)特大地震影響火欧,放射性物質(zhì)發(fā)生泄漏棋电。R本人自食惡果不足惜茎截,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赶盔。 院中可真熱鬧企锌,春花似錦、人聲如沸于未。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沉眶。三九已至打却,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谎倔,已是汗流浹背柳击。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留片习,地道東北人捌肴。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像藕咏,于是被迫代替她去往敵國(guó)和親状知。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容