javascript字符串统计及重排

194 阅读1分钟

给出一个仅包含字母大字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。次数相同,按照自然顺序进行排序,且小写字母在大写字母之前 例: 输入仅包含字母的字符串, 输出 按照字母从大到小排序,英文分号分隔,注意末尾分号;字母和次数用英文冒号分隔
输入 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 }