Javascript计数重复的字母

时间:2016-11-22 09:52:35

标签: javascript algorithm repeat

我是这里的新生,很抱歉提出简单的问题而且我试图解决问题以计算同一封信。

Input:"aabbcde"
cause a = 2, b= 2, c= 1 , d =1 , e = 1
Output:"2a2b1c1d1e" or a2b2c1d1e1

这里我的代码未完成,我坚持了

function repeatL(str) {
    var word = str.split("").sort();
    var temp = 0;
    var i =1;
    while(i< word.length){
        if(word[i] === word[i +1]) { 
            //return temp to array of a += 1 ?
        };
    }
}
repeatL("abbbdd"); //output should be a1b3d2

如果输入不是字符串而是数组:

Input:[a,ab,bc,d,e]

是否有可能解决?

4 个答案:

答案 0 :(得分:4)

你可以使用一个变量作为结果字符串,以一个带有1的count变量开始,并通过检查前一个和实际的字母进行迭代。然后计数或将计数移动到最后一个字母的结果集。将计数器重置为1,因为实际的字母数是1。

最后,用最后一次计数和字母结束结果,因为一个字母没有用计数处理(记住,你从索引1开始,你总是看到实际索引之前的字母)。

function repeatL(str) {
    var word = str.split("").sort(),
        count = 1,
        i = 1,
        result = '';

    while (i < word.length) {
        if (word[i - 1] === word[i]) {
            count++;
        } else {
            result += count + word[i - 1];
            count = 1;
        }
        i++;
    }
    result += count + word[i - 1];
    return result;
}

console.log(repeatL("aabbcde"));
console.log(repeatL(['a', 'ab', 'bc', 'd', 'e'].join(''))); // with array after joining

答案 1 :(得分:0)

您只需使用reduce()构建数组,然后使用join()获取字符串。

&#13;
&#13;
var input = "aabbcde";

var result = input.split('').reduce(function(r, e) {
  var i = r.indexOf(e);
  (i != -1) ? r[i - 1] ++: r.push(1, e)
  return r;
}, []).join('')

console.log(result)
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我会使用一个对象并将每个字符添加为键。如果密钥存在,则增加值,否则添加新密钥,值为1

function repeatL(str) {
  var count = {};
  var arr = str.split("");
    str = "";
  for(var i=0;i<arr.length;i++){
    if(count[arr[i]]){
      count[arr[i]] = count[arr[i]]+1;
    }
    else {
       count[arr[i]] = 1;
    }
  }
  for(var key in count){
    str+= key+count[key];
  }
  return str;
}

答案 3 :(得分:0)

以下示例也适用于数组:

function getFrequency(string) {
    var freq = {};
    for (var i=0; i<string.length;i++) {
        var character = string[i];
        if (freq[character]) {
          freq[character]++;
        } else {
          freq[character] = 1;
        }
    }

    return freq;
};

function repeatL(str) {
    var freq = getFrequency(str);
    result = '';
    for (var k in freq) {
        if (freq.hasOwnProperty(k)) {
          result += freq[k] + k;
        }
    }
    return result;
};

console.log(repeatL('abbbdd'));
console.log(repeatL('aabbcdeaaabbeedd'));
console.log(repeatL(['a', 'a', 'b', 'a', 'c']));