给出一个仅包含字母大字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。次数相同,按照自然顺序进行排序,且小写字母在大写字母之前
例:
输入仅包含字母的字符串,
输出 按照字母从大到小排序,英文分号分隔,注意末尾分号;字母和次数用英文冒号分隔
输入 xyxyXX
输出 x:2;y:2;X:2;
输入 abababb
输出 b:4;a:3;
//字符串统计并重排
rebuildStr(str){
let arr1 = str.split('')
console.log(arr1,'arr1')
let arr2 = []
arr1.forEach((element,index) => {
if(arr2.findIndex(i=>i.name==element) >-1){
let tarIndex= arr2.findIndex(i=>i.name==element)
arr2[tarIndex].time++
}else{
arr2.push({
name:element,
time:1
})
}
//次数从大到小排序
// 次数相同,按字母排序,小写在大写之前 自然顺序
this.sortArr2(arr2)
let arr3 = arr2.map(item => {
return item.name+':'+item.time
})
console.log(arr3,'arr3',arr3.join(';'))
let str = arr3.join(';')+';'
//去除收尾的 引号
var reg = /^['|"](.*)['|"]$/;
var res =str.replace(reg,'$1')
console.log(res,'res')
});
},
// 冒泡排序
sortArr(arr){
for (let i= 0;i<= arr.length-1; i++){
for(let j=0;j< arr.length-1;j++){
if(arr[j]<arr[j+1]){
var temp = arr[j]
arr[j] = arr[j+1]
arr[j+1]= temp
}
}
}
console.log(arr,'arr')
return arr
},
输入 xyxyXX
输出 x:2;y:2;X:2;
输入 abababb
输出 b:4;a:3;
//字符串统计并重排
rebuildStr(str){
let arr1 = str.split('')
console.log(arr1,'arr1')
let arr2 = []
arr1.forEach((element,index) => {
if(arr2.findIndex(i=>i.name==element) >-1){
let tarIndex= arr2.findIndex(i=>i.name==element)
arr2[tarIndex].time++
}else{
arr2.push({
name:element,
time:1
})
}
//次数从大到小排序
// 次数相同,按字母排序,小写在大写之前 自然顺序
this.sortArr2(arr2)
let arr3 = arr2.map(item => {
return item.name+':'+item.time
})
console.log(arr3,'arr3',arr3.join(';'))
let str = arr3.join(';')+';'
//去除收尾的 引号
var reg = /^['|"](.*)['|"]$/;
var res =str.replace(reg,'$1')
console.log(res,'res')
});
},
// 冒泡排序
sortArr(arr){
for (let i= 0;i<= arr.length-1; i++){
for(let j=0;j< arr.length-1;j++){
if(arr[j]<arr[j+1]){
var temp = arr[j]
arr[j] = arr[j+1]
arr[j+1]= temp
}
}
}
console.log(arr,'arr')
return arr
},
// 复杂数据 冒泡排序 改造 sortArr2(arr){ for (let i= 0;i<= arr.length-1; i++){ for(let j=0;j< arr.length-1;j++){ //次数对比 更改位置 if(arr[j].time<arr[j+1].time){ var temp = arr[j] arr[j] = arr[j+1] arr[j+1]= temp } //次数相同 对比大小写字母ASCLL编码 小写字母值97-122 大写字母值65-90 if(arr[j].time==arr[j+1].time){ let num1 = arr[j].name.charCodeAt() let num2 = arr[j+1].name.charCodeAt() //只考虑 大小写排列 if(num1<num2){ var temp = arr[j] arr[j]= arr[j+1] arr[j+1]= temp } // 同为小写或者大写字母 按照自然顺序排序 if((num1>=97&&num2>=97)||(num1<=90&&num2<=90)){ if(num1<num2){ var temp = arr[j+1] arr[j+1]= arr[j] arr[j]= temp } } } } } console.log(arr,'arr') return arr }