国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

一道關(guān)于字符操作的面試題

2019-11-15 01:11:18
字體:
供稿:網(wǎng)友
一道關(guān)于字符操作的面試題

假設(shè)現(xiàn)在有一個(gè)很長(zhǎng)的字符串(只包括英文字母),現(xiàn)在需要統(tǒng)計(jì)長(zhǎng)字符串中每個(gè)字母字符出現(xiàn)的次數(shù)。

暫時(shí)想出以下兩種方法:

package com.sphere.letters;import java.util.ArrayList;import java.util.HashMap;import java.util.List;/** * 統(tǒng)計(jì)長(zhǎng)字符串中每個(gè)字母字符出現(xiàn)的次數(shù)(區(qū)分大小寫) * 并以 <字符,出現(xiàn)次數(shù)> 的鍵值對(duì)形式返回 */public class Test {    PRivate static String TEST = "AWQEYIOAHDHDKKLDLAHFHJALAFHANNAFGJCXCKBZCQIEO" +            "PADHAZBZVCFGCSHDJCKCLDMDHFAKAIIAYQO";    public static void main(String[] args) {        getMapByArray(TEST);    }        private static HashMap<Character, Integer> getMapByArray(String str){        char[] array = str.toCharArray();        List<Character> list = new ArrayList<Character>();        HashMap<Character, Integer> map = new HashMap<Character, Integer>();        for (int i = 0; i < array.length; i++) {            list.add(array[i]);        }        //循環(huán)對(duì)比 假定沒有一個(gè)重復(fù)的元素 則循環(huán)基數(shù)為size()        int length = list.size();                while(length > 0){            //某個(gè)字符出現(xiàn)的次數(shù)  list首個(gè)元素不再比較之列            int count = 1;            for (int i = 1; i < length; i++) {                //每次拿list的第一個(gè)字符 與之后的所有字符對(duì)比                if(0 == list.get(0).compareTo(list.get(i))){                    //存在相同的就從list中移除                    //并且長(zhǎng)度減1,出現(xiàn)次數(shù)加1,                    //i減1,下次還從此索引檢測(cè),以防連續(xù)字母出現(xiàn)時(shí)跳過的情況                    list.remove(i);                    length--;                    count++;                    i--;                }            }            //移除第一個(gè)字符            map.put(list.get(0), count);            list.remove(0);            length--;            /**************FOR TEST*******************            for (Character ch : list) {                System.out.print(ch);            }            System.out.println();            System.out.println("元素個(gè)數(shù):"+list.size());            **************FOR TEST*******************/                    }        System.out.println(map);                return map;    }}

也可以利用26個(gè)英文字母的特殊性得到字母出現(xiàn)的次數(shù)

我們可以建立一個(gè)int[] array = new int[26] 的數(shù)組,

英文字母具有特殊性 字母對(duì)應(yīng)ASCII編碼中的某個(gè)值

以字母A或者a為基數(shù) 將每個(gè)字符和A或者a相減,并將對(duì)應(yīng)位置的值加1

    private static int[] array = new int[26];    //英文字母具有特殊性 字母對(duì)應(yīng)ASCII編碼中的某個(gè)值    //以字母A或者a為基數(shù)  將每個(gè)字符和A或者a相減    private static void getCharCountsByASCII(String str){        char temp ;        for (int i = 0; i < str.length(); i++) {            temp = str.charAt(i);            if(temp >= 'A' && temp <='Z'){                array[temp - 'A']++;            }else if(temp >= 'a' && temp <='z') {                array[temp - 'a']++;            }else {                            }        }                /**************FOR TEST*******************/        for (int i = 0; i < array.length; i++) {            System.out.print(array[i]+" ");        }        /**************FOR TEST*******************/    }

感覺這兩種方法效率都不是很高,哪位有更好的辦法還請(qǐng)留言告知一下,謝謝。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通州区| 讷河市| 梅州市| 武川县| 黎平县| 孟村| 临沂市| 阳山县| 集安市| 图木舒克市| 怀柔区| 章丘市| 大渡口区| 阜城县| 曲松县| 屯留县| 望奎县| 宜章县| 蒲江县| 磴口县| 鄂州市| 青铜峡市| 通道| 固原市| 江城| 孝昌县| 晋州市| 桦南县| 诸城市| 定远县| 兴文县| 黑山县| 吉木乃县| 临高县| 宣汉县| 浮山县| 天津市| 河西区| 湛江市| 东源县| 福建省|