1. 题目
请读取出arr字符串中每个字母重复出现的次数分别是多少?如字符串arr="abcdaabc",a重复出现3次,b重复出2次,c重复出2次,d重复出1次。
2. 算法
- 定义记录出现字符的数组chars和字符出现次数的数组counts
- 遍历字符串的每一个字符
- 判断字符是否已经存在chars,如果存在,则相应计数加一;否则,把字符添加到chars中,counts相应增加数据1
3. 代码
var arr = "abcdaabc";
// 记录字符
var chars = [];
// 记录字符出现次数
var counts=[];
// 遍历字符串每一个字符
for( var i in arr ){
// 获取字符位置
var index = chars.indexOf(arr.charAt(i));
if(-1==index){
// 如果不存在
chars.push(arr.charAt(i));// 保存新的字符
counts.push(1); // 新的字符计数设为1
}else{
// 如果存在,对应计数加一
counts[index]++;
}
}
// 测试:打印结果
for( var i in chars ){
document.write("字符"+chars[i]+"出现"+counts[i]+"次 ");
}
4. 优化
一般处理都是作为函数,所以我们可以把上面的处理做成函数。
输入值为字符串,输出值为结果对象。
function countStr(){
// 记录字符
var chars = [];
// 记录字符出现次数
var counts=[];
// 遍历字符串每一个字符
for( var i in arr ){
// 获取字符位置
var index = chars.indexOf(arr.charAt(i));
if(-1==index){
// 如果不存在
chars.push(arr.charAt(i));// 保存新的字符
counts.push(1); // 新的字符计数设为1
}else{
// 如果存在,对应计数加一
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]+"出现"+res.counts[i]+"次 ");
}