我是这里的新生,很抱歉提出简单的问题而且我试图解决问题以计算同一封信。
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]
是否有可能解决?
答案 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()
获取字符串。
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;
答案 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']));