JS算法:统计字符

1. 题目

请读取出arr字符串中每个字母重复出现的次数分别是多少?如字符串arr="abcdaabc",a重复出现3次,b重复出2次,c重复出2次,d重复出1次。

2. 算法

  1. 定义记录出现字符的数组chars和字符出现次数的数组counts
  2. 遍历字符串的每一个字符
  3. 判断字符是否已经存在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]+"次 ");
}

你可能感兴趣的:(JS算法:统计字符)