思路(能力有限,比较菜,望多指导)
循环,第一重循环直接记count = 1
,然后第二重循环在当前元素的后面找(注意:这里做了处理,不遍历重复的元素,如第一重循环的array[0]
元素为s
,第一重循环的array[5]
元素仍为s
则不进行下面的操作,因为已经遍历过了。),找到就count
加1
,把每一个元素和它重复的次数计入对象。
然后,遍历存放字符重复次数的对象,找出字符重复次数的最大值,再遍历一遍找到重复次数等于最大值的元素取出来。(这里不合并操作是因为,s
重复次数为4
,d
重复次数也为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')