前端面试——字符串的几道算法题

1.给定一个数字,返回结果为每三个数加一个逗号,比如100000,返回结果为100,000

function toThousands(number){
    numArr = number.toString().split('')
    let counter = 0
    const arr = []
    numArr.forEach((item,index) => {
        counter++        
        counter % 3 == 0 && index !== numArr.length-1 ? arr.push(item,',') : arr.push(item)
    })
    return arr.join('')
}

2.给定一个字符串,输出不出现重复字符的最大长度

// 滑动窗口
// 设置左右两个指针,右指针一直向右扩张,当不满足条件时,左边指针开始收缩,直到再次满足条件,之后右指针继续扩张

function lengthOfLongestSubstring (s) {
    let count=0;
    let set=new Set();
    //左指针用来收缩窗口
    let left=0;
    //右指针用来扩张窗口
    let right=0;
    while(left<s.length){
        //如果不重复,就不断扩张窗口,元素添加到set中
        while(right<s.length&&!set.has(s[right])){
            set.add(s[right]);
            right++;
        }
        //元素重复了,先记录子串长度,然后收缩窗口
        count=Math.max(count,right-left);
        //收缩窗口
        set.delete(s[left]);
        left++;
    }
        return count;
}

3.给定一个字符串,输出字符串中出现最多的字符和次数

function maxLetter(str){
    var obj = {}
    for(let i = 0; i < str.length; i++){
        if(!obj.hasOwnProperty(str[i])){
            obj[str[i]] = 1
        }else{
            obj[str[i]]++
        }
    }
    let maxKey,maxNumber = 0
    for(let key in obj){
        if(maxNumber < obj[key]){
            maxNumber = obj[key]
            maxKey = key
        }
    }
    return `最大的字符是${maxKey},出现的次数为${maxNumber}` 
}

4.把url地址栏中的参数保存到对象中并输出这个对象

function getUrlParams(url){
  const Params = {}
  if(url.indexOf('?')>0){//判断是否有qurey
    let parmas = url.slice(url.indexOf('?')+1)//截取出query
    const paramlists = parmas.split('&')//分割键值对
    for (const param of paramlists) {
      let a = param.split('=')
      Object.assign(Params,{[a[0]]:a[1]})//将键值对封装成对象
    }
  }
  return Params
}

猜你喜欢

转载自blog.csdn.net/weixin_51382988/article/details/129732020