1. 題目
請(qǐng)讀取出arr字符串中每個(gè)字母重復(fù)出現(xiàn)的次數(shù)分別是多少?如字符串a(chǎn)rr="abcdaabc",a重復(fù)出現(xiàn)3次,b重復(fù)出2次,c重復(fù)出2次,d重復(fù)出1次。
2. 算法
- 定義記錄出現(xiàn)字符的數(shù)組chars和字符出現(xiàn)次數(shù)的數(shù)組counts
- 遍歷字符串的每一個(gè)字符
- 判斷字符是否已經(jīng)存在chars,如果存在,則相應(yīng)計(jì)數(shù)加一;否則,把字符添加到chars中,counts相應(yīng)增加數(shù)據(jù)1
3. 代碼
var arr = "abcdaabc";
// 記錄字符
var chars = [];
// 記錄字符出現(xiàn)次數(shù)
var counts=[];
// 遍歷字符串每一個(gè)字符
for( var i in arr ){
// 獲取字符位置
var index = chars.indexOf(arr.charAt(i));
if(-1==index){
// 如果不存在
chars.push(arr.charAt(i));// 保存新的字符
counts.push(1); // 新的字符計(jì)數(shù)設(shè)為1
}else{
// 如果存在,對(duì)應(yīng)計(jì)數(shù)加一
counts[index]++;
}
}
// 測試:打印結(jié)果
for( var i in chars ){
document.write("字符"+chars[i]+"出現(xiàn)"+counts[i]+"次 ");
}
4. 優(yōu)化
一般處理都是作為函數(shù),所以我們可以把上面的處理做成函數(shù)。
輸入值為字符串,輸出值為結(jié)果對(duì)象。
function countStr(){
// 記錄字符
var chars = [];
// 記錄字符出現(xiàn)次數(shù)
var counts=[];
// 遍歷字符串每一個(gè)字符
for( var i in arr ){
// 獲取字符位置
var index = chars.indexOf(arr.charAt(i));
if(-1==index){
// 如果不存在
chars.push(arr.charAt(i));// 保存新的字符
counts.push(1); // 新的字符計(jì)數(shù)設(shè)為1
}else{
// 如果存在,對(duì)應(yīng)計(jì)數(shù)加一
counts[index]++;
}
}
return {
chars : chars,
counts:counts
};
}
// 測試
var arr = "abcdaabc";
var res = countStr(arr);
for( var i in res.chars ){
document.write("字符"+res.chars[i]+"出現(xiàn)"+res.counts[i]+"次 ");
}