成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

面試題:尋找一個(gè)字符串中出現(xiàn)次數(shù)最多的字符以及出現(xiàn)的次數(shù)

lei___ / 2197人閱讀

摘要:要求編寫代碼實(shí)現(xiàn)尋找一個(gè)字符串中出現(xiàn)次數(shù)最多的字符以及出現(xiàn)的次數(shù)。最后只需要在集合中找到值最大的即可。

要求編寫代碼實(shí)現(xiàn):尋找一個(gè)字符串中出現(xiàn)次數(shù)最多的字符以及出現(xiàn)的次數(shù)。

解法一:用刪除法實(shí)現(xiàn) (挺巧妙的一種)
public class FindTheMostAppearChar {
  public static void main(String[] args) {
    deleteMethodToAchieve();
  }
  
    /**
     * 用刪除法實(shí)現(xiàn) (挺巧妙的)
     * 解題思路:每次取出字符串的第一個(gè)字符,將字符串中與第一個(gè)字符相同的字符全部刪掉,
     * 然后通過計(jì)算刪除前后字符串的長度來確定該字符在字符串出現(xiàn)的次數(shù),最終比較出出現(xiàn)次數(shù)最多的字符
     */
    public static void deleteMethodToAchieve() {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine().trim();
        scanner.close();
        int max_length = 0;
        String max_str = "";
        while (string.length() > 0) {
            String firstChar = string.substring(0,1);
            int length = string.length();
            string = string.replaceAll(firstChar, "");
            if (length - string.length() > max_length) {
                max_length = length - string.length();
                max_str = firstChar;
            }
        }
        System.out.println("出現(xiàn)次數(shù)最多的字符是:" + max_str + ",出現(xiàn)的次數(shù):" + max_length);
    }
}
解法二:用查找法實(shí)現(xiàn)
public class FindTheMostAppearChar {
  public static void main(String[] args) {
    hashMapMethodToAchieve();
  }
  
    /**
     * 用字符數(shù)組查找法實(shí)現(xiàn)
     * 解題思路:先將字符串拆分成字符數(shù)組,然后轉(zhuǎn)存到 HashMap 集合中,
     * 該集合的key為字符串中出現(xiàn)的字符,value為對應(yīng)字符串出現(xiàn)的次數(shù)。
     * 最后只需要在HashMap集合中找到Value值最大的key即可。
     */
    public static void hashMapMethodToAchieve() {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine().trim();
        scanner.close();
        // 將字符串轉(zhuǎn)換成字符數(shù)組
        char[] arr = string.toCharArray();
        Map map = new HashMap<>();
        // key為出現(xiàn)的字符,value 為該字符出現(xiàn)的次數(shù),將字符數(shù)組轉(zhuǎn)存在 HashMap 中
        if (arr != null && arr.length > 0) {
            for (int i = 0; i < arr.length; i++) {
                if (map.get(arr[i]) != null) {
                    // 若不為空,說明已經(jīng)存在相同的字符,則 value 值在原來的基礎(chǔ)上加1
                    map.put(arr[i],map.get(arr[i]) + 1);
                } else {
                    map.put(arr[i], 1);
                }
            }
        }
      
          // 查找出出現(xiàn)次數(shù)最多的字符以及出現(xiàn)的次數(shù)也有多種寫法
          FindTheMostCharByMap(map); // 查找寫法一:用 Iterator 遍歷 Map 來查找
          
        // FindTheMostCharByMapEntry(map); // 查找寫法二:用 Map.Entry 提高效率
      
        // FindTheMostCharByForLoop(map, arr); // 查找寫法三:直接用 for 循環(huán)來遍歷查找
    }
  
  // 查找寫法一:用 Iterator 遍歷 Map 來查找
  public statice void FindTheMostCharByMap(Map map) {
        Set keys = map.keySet(); // 獲取所有的key
        Iterator iterator = keys.iterator(); // 實(shí)例化 Iterator
        Character maxKey = (Character) iterator.next(); //定義第一個(gè)為最大的value和對應(yīng)的key
        int maxValue = map.get(maxKey);
        while (iterator.hasNext()) {
            Character temp = (Character) iterator.next();
            if (maxValue < map.get(temp)) {
                maxKey = temp;
                maxValue = map.get(temp);
            }
        }
        System.out.println("出現(xiàn)次數(shù)最多的字符是:" + maxKey + ", 出現(xiàn)的次數(shù):" + maxValue);
  }
  
  // 查找寫法二:用 Map.Entry 提高效率
  public static void FindTheMostCharByMapEntry(Map map) {
        Iterator iterator = map.entrySet().iterator();
        Map.Entry entry = (Map.Entry) iterator.next();
        char maxKey = (char) entry.getKey(); // 獲取key
        int maxValue = (int) entry.getValue(); // 獲取value
        while (iterator.hasNext()) {
            entry = (Map.Entry) iterator.next();
            char tempKey = (char) entry.getKey();
            int tempValue = (int) entry.getValue();
            if (maxValue < tempValue) {
                maxKey = tempKey;
                maxValue = tempValue;
            }
        }
        System.out.println("出現(xiàn)次數(shù)最多的字符是:" + maxKey + ", 出現(xiàn)的次數(shù):" + maxValue);
  }
    
  // 查找寫法三:直接用 for 循環(huán)來遍歷查找
  public static void FindTheMostCharByForLoop(Map map, char[] arr) {
        int maxValue = map.get(arr[0]);
        char maxKey = " ";
        for (int i = 0; i < arr.length; i++) {
            if (maxValue < map.get(arr[i])) {
                maxValue = map.get(arr[i]);
                maxKey = arr[i];
            }
        }
        System.out.println("出現(xiàn)次數(shù)最多的字符是:" + maxKey + ", 出現(xiàn)的次數(shù):" + maxValue);
  }
  
}
解法三:用排序法實(shí)現(xiàn)
public class FindTheMostAppearChar {
  public static void main(String[] args) {
    sortMethodToAchieve();
  }
  
     /**
     * 用排序法實(shí)現(xiàn)
     * 解題思路:先將字符串轉(zhuǎn)換成字符數(shù)組,然后對字符數(shù)組進(jìn)行排序,
     * 統(tǒng)計(jì)每個(gè)字符重復(fù)出現(xiàn)的次數(shù),最后比較得出出現(xiàn)次數(shù)最多的字符以及出現(xiàn)次數(shù)
     */
    public static void sortMethodToAchieve() {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine().trim();
        scanner.close();
        char[] arr = string.toCharArray();
        Arrays.sort(arr); // 對數(shù)組進(jìn)行排序
        char maxValue = "a"; // 記錄出現(xiàn)次數(shù)最多的元素
        int maxCount = 0; // 記錄出現(xiàn)次數(shù)
        int count = 1;
        for (int i = 0; i < arr.length - 1; i++) {
            if (arr[i] == arr[i+1]) {
                count++;
            }
            if (arr[i] != arr[i+1]) {
                if (count > maxCount) {
                    maxCount = count;
                    maxValue = arr[i];
                }
                count = 1;
            }
        }
        System.out.println("出現(xiàn)次數(shù)最多的字符是:" + maxValue + ", 出現(xiàn)的次數(shù):" + maxCount);
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77830.html

相關(guān)文章

  • 面試被虐】如何只用2GB內(nèi)存從20億,40億,80億個(gè)整數(shù)找到出現(xiàn)次數(shù)數(shù)?

    摘要:這幾天小秋去面試了,不過最近小秋學(xué)習(xí)了不少和位算法相關(guān)文章,例如面試現(xiàn)場如何判斷一個(gè)數(shù)是否在億個(gè)整數(shù)中算法技巧位運(yùn)算裝逼指南對于算法題還是有點(diǎn)信心的,,,,于是,發(fā)現(xiàn)了如下對話。這幾天小秋去面試了,不過最近小秋學(xué)習(xí)了不少和位算法相關(guān)文章,例如 【面試現(xiàn)場】如何判斷一個(gè)數(shù)是否在40億個(gè)整數(shù)中? 【算法技巧】位運(yùn)算裝逼指南 對于算法題還是有點(diǎn)信心的,,,,于是,發(fā)現(xiàn)了如下對話。 20億級別 面試...

    468122151 評論0 收藏0
  • 面試總結(jié)(給自己看

    摘要:記錄水平垂直居中方法絕對定位方法絕對定位方法方法和的區(qū)別在文檔流中沒有,在文檔流占據(jù)空間但不顯示隱形是否繼承不繼承是否占據(jù)空間不占據(jù)空間頁面屬性更改是否重新渲染重新渲染忘了點(diǎn)擊列表顯示相應(yīng)內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容方法閉包方法事件代理布爾值是 20170913記錄 1. 水平垂直居中 // 方法1: 絕對定位1 // 方法2: 絕對定位2 // 方法3: flex // 方法4: cs...

    mikyou 評論0 收藏0
  • JavaScript算法(附10道面試常見算法解決方法和思路)

    摘要:中的算法附道面試常見算法題解決方法和思路關(guān)注每日一道面試題詳解面試過程通常從最初的電話面試開始,然后是現(xiàn)場面試,檢查編程技能和文化契合度。值得記住的數(shù)組方法有和。一個(gè)好的解決方案是使用內(nèi)置的方法。 JavaScript中的算法(附10道面試常見算法題解決方法和思路) 關(guān)注github每日一道面試題詳解 Introduction 面試過程通常從最初的電話面試開始,然后是現(xiàn)場面試,檢查編程...

    Cruise_Chan 評論0 收藏0
  • 常見大數(shù)據(jù)和空間面試

    摘要:答案使用,申請一個(gè)長度為類型的,每個(gè)位置只表示或,該數(shù)組占用空間約。遍歷億個(gè)數(shù),當(dāng)前數(shù)為,落在區(qū)間,對應(yīng)。 過濾100億黑名單 題目 假設(shè)有100億個(gè)URL的黑名單,每個(gè)URL最多占用64B,設(shè)計(jì)一個(gè)過濾系統(tǒng),判斷某條URL是否在黑名單里。 要求 不高于萬分之一的判斷失誤率;額外內(nèi)存不超過30GB 答案 100億個(gè)64B的URL需要640GB的內(nèi)存,顯然直接存哈希表不合理??紤]布隆過濾...

    Hydrogen 評論0 收藏0
  • 三道關(guān)于字符JavaScript面試解析

    摘要:方法二生成統(tǒng)計(jì)次數(shù)字符最多的是,出現(xiàn)了次點(diǎn)評稍微好一點(diǎn)。問題三題目如何給字符串加千分符例如方法一轉(zhuǎn)換的方法轉(zhuǎn)化為數(shù)組最終的結(jié)果點(diǎn)評將字符串轉(zhuǎn)化為數(shù)組,然后對其切分重組。 分享幾道js面試題,自己感覺還是挺重要的,當(dāng)看到題目的時(shí)候希望大家先花幾秒鐘考慮一下,然后在看答案。如果有比較好的解法,歡迎大家留言指正,謝謝大家! 第一題 題目: 寫一個(gè)字符串轉(zhuǎn)換成駝峰的方法? 例如:borde...

    Sourcelink 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<