JavaScript计算重复字母

4

我是这里的新生,请原谅我问一些简单的问题。我正在尝试解决一个计算相同字母的问题。

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]

这个问题可否解决?

2
这个 aabbcdeaaabbeedd 的预期输出是什么? - gkb
if(Array.isArray(obj)) obj = obj.join(''); - Uma Kanth
这个问题有解决的可能吗?现在你知道没有什么是不可能的;p - gkb
gkb的第一个评论非常重要。输出2a2b1c1d1e3a2b2e2d的算法与5a4b1c3d3e的不同。 - Fefux
@Fefux - 是的,但问题要求回答后者,就是对我的评论所回答的那个。 - gkb
显示剩余3条评论
4个回答

4
你可以使用一个变量来存储结果字符串,从计数变量1开始迭代并检查前一个和当前字母。然后,将计数器或将计数器移动到结果集中,并用最后一个字母重置计数器为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


0

您可以简单地使用reduce()来构建数组,然后使用join()来获取字符串。

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)


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']));


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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接