一、请找出字符串中连续出现最多的字符和个数
//方法一
const str1 = 'abcaakjbb'
const str2 = 'abbkejsbcccwqaa'
function getMax(str) {
let obj = {},arr = [...str],current='',max=0;
for (let i=0,len=arr.length; i<len; i++){
if(current === arr[i]){
obj[arr[i]] +=1;
}else {
current=arr[i];
obj[arr[i]] =obj[arr[i]]?obj[arr[i]]:1;//若已经存在,保留原来的值,以免覆盖
}
}
for(item in obj){
if(obj[item] > max){
max = obj[item];
current =item;
}
}
return {current,max};
}
console.log(getMax(str1));
console.log(getMax(str2));
//方法二
const str1 = 'abcaakjbb'
const str2 = 'abbkejsbcccwqaa'
function getMax(str) {
const match = str.match(/(.)\1+/g)
match.sort((x,y) => y.length - x.length)
const len = match[0].length
const obj = {}
for(let item of match) {
if(item.length <len) {
break
}else{
obj[item[0]] = len
}
}
return obj
}
// 输出 {'a':2,'b':2}
console.log(getMax(str1))
// 输出 {c: 3}
console.log(getMax(str2))
二、字符串排序
在一个字符串数组中有红、黄、蓝三种颜色的球,且个数不相等、顺序不一致,请为该数组排序。使得排序后数组中球的顺序为:黄、红、蓝。
例如:红蓝蓝黄红黄蓝红红黄红,排序后为:黄黄黄红红红红红蓝蓝蓝
//先将字符串分割成数组
//再定义排序规则,将数组根据规则进行排序
//最后将排完序的数组拼接成字符串
const str = '红蓝蓝黄红黄蓝红红黄红'
const arr = str.split('')
const obj = {'黄':0,'红':1,'蓝':2}
console.log(arr.sort((x,y) => obj[x] - obj[y]))
console.log(arr.join(''))
三、数组排序并去重
//思路:声明一个空数据用来存放去重后的数组
//通过indexOf去重,然后通过sort对排序后的数组进行排序
var arr=[1,8,5,6,4,2,3,8,6,7,5,3];
var res=[];
for(var i=0;i<arr.length;i++){
if(res.indexOf(arr[i])==-1){
res.push(arr[i]);
res.sort();
}
}
console.log(res);