查找字符串中重复次数最多的元素

思路(能力有限,比较菜,望多指导)

循环,第一重循环直接记count = 1,然后第二重循环在当前元素的后面找(注意:这里做了处理,不遍历重复的元素,如第一重循环的array[0]元素为s,第一重循环的array[5]元素仍为s则不进行下面的操作,因为已经遍历过了。),找到就count1,把每一个元素和它重复的次数计入对象。

然后,遍历存放字符重复次数的对象,找出字符重复次数的最大值,再遍历一遍找到重复次数等于最大值的元素取出来。(这里不合并操作是因为,s重复次数为4d重复次数也为4,这样会漏掉一个)

纯循环方法,复杂度飙升

在这里插入图片描述

借用正则表达式,复杂度也不低

在这里插入图片描述

源码

// 找出字符串中重复最多的字符并输出重复次数 
function getMaxRepeatStr (String) {
    let checked = [] // 检查过的元素
    var stringArray = String.split('')
    let obj = {} // 存放字符重复次数的对象

    for (var i = 0; i < stringArray.length; i++) {
        if (!checked.includes(stringArray[i])) { // 没检查过才进行二次循环
            let count = 1 // 重复次数

            obj[stringArray[i]] = count

            for (var j = i + 1; j < stringArray.length; j++) {
                if (stringArray[i] === stringArray[j]) {
                    count++
                    obj[stringArray[i]] = count
                } else {
                    continue
                }
            }

            checked.push(stringArray[i]) // 标记已检查
        } else {
            continue
        }
    }

    // 找出重复次数最大值
    let maxVal = 0
    Object.keys(obj).forEach(element => {
        if (obj[element] > maxVal) {
            maxVal = obj[element]
        }
    })

    // 取得重复次数最多的字符
    let result = {}
    Object.keys(obj).forEach(element => {
        if (obj[element] === maxVal) {
            result[element] = obj[element]
        }
    })

    console.log('字符串中重复次数最多的字符为:', result)
}

function getMaxRepeatStr (String) {
    let checked = [] // 检查过的元素
    var stringArray = String.split('')
    let obj = {} // 存放字符重复次数的对象

    for (var i = 0; i < stringArray.length; i++) {
        if (!checked.includes(stringArray[i])) { // 没检查过才进行处理
            let reg = new RegExp(stringArray[i], "ig");
            let count = String.match(reg).length;
            checked.push(stringArray[i]) // 标记已检查
            obj[stringArray[i]] = count
        } else {
            continue
        }
    }

    // 找出重复次数最大值
    let maxVal = 0
    Object.keys(obj).forEach(element => {
        if (obj[element] > maxVal) {
            maxVal = obj[element]
        }
    })

    // 取得重复次数最多的字符
    let result = {}
    Object.keys(obj).forEach(element => {
        if (obj[element] === maxVal) {
            result[element] = obj[element]
        }
    })

    console.log('字符串中重复次数最多的字符为:', result)
}
getMaxRepeatStr('sdfjhkjhkjlsdsdfsd')
getMaxRepeatStr('dfghjjjklmnssss')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值