基本上,我正在尝试编写使用GGHTTYYYD并返回2GH2T3YD的函数。请注意,数字优先。我正在尝试用javascrript编写它。如何做到这一点?基本上这里是我的代码:
let s = 'GGHTTYYYD';
const count = (str) => {
let hash = {};
str.split('').forEach((char) => {
hash[char] = hash[char] ? (hash[char] += 1) : 1;
});
return hash
};
现在我坚持将名为hash的对象转换为字符串并过滤所有“ 1”
这是一个python实现,但我认为它很简单。希望对您有所帮助!
def func(st):
# string to be formed
new_st = ""
# current character
curr_char = st[0]
# current character repeat count
curr_char_times = 1
for char in st[1:]:
# character changed
if char != curr_char:
# if times is 1 do not write 1
if curr_char_times == 1:
new_st += curr_char
else:
new_st += str(curr_char_times)+curr_char
# return back to initial state
curr_char = char
curr_char_times = 1
else:
# if character not changed increment times
curr_char_times += 1
# process the last char
if curr_char_times == 1:
new_st += curr_char
else:
new_st += str(curr_char_times)+curr_char
return new_st
将JavaScript对象用作地图,然后将其转换为字符串:
let inputStr="GGHTTYYYD"
const freqCount = (str) =>{
const map={};
//create a frequency map using a Javascript Object
for(let c of str){
map[c] = map[c] ? map[c]+1 : 1;
}
let outputStr="";
for(let key in map){
//add an if so we don't log 1's, print out the frequency
if(map[key]!==1){outputStr+=map[key];}
//add the letter no matter what
outputStr+=key;
}
return outputStr;
}
console.log(freqCount(inputStr));
//2GH2T3YD