前端常见手写算法题

  1. 判断字符串中出现的次数最多的字符,返回该字符及次数
let string = '1add23rte2fgg52'

function most(str) {
    
    
  let ret = {
    
    }
  for (let i = 0; i < str.length; i++) {
    
    
    let value = str[i]
    if (ret[value]) {
    
    
      ret[value]++
    } else {
    
    
      ret[value] = 1
    }
  }

  let char = ''
  let count = 0
  for (let j in ret) {
    
    
    if (ret[j] > count) {
    
    
      char = j
      count = ret[j]
    }
  }
  
  return (targetObj = {
    
    
    char,
    count,
  })
}

console.log(most(string)) // { char: '2', count: 3 }
  1. 用两个栈实现队列
//两个数组模拟栈的行为
var stack1=[],//存储栈
    stack2=[];//辅助栈
 
//栈是后入先出(LIFO,last in first out),队列是先入先出(FIFO,first in first out)
 
//队列插入元素函数
function push(ele)
{
    
    
    //模拟队列的push操作,直接往存储栈stack1中推入即可
    //但是要考虑辅助栈stack2中还存在值的情况,需要先将辅助栈中的值推回存储栈中
    while(stack2.length !== 0){
    
    
        stack1.push(stack2.pop());
    }
    stack1.push(ele);
}
 
//队列删除元素函数
function pop()
{
    
    
    //模拟队列的pop操作则要考虑栈的后入先出特性,需要先将存储栈stack1中的数组,推入辅助栈stack2,然后辅助栈弹出元素
    while(stack1.length !== 0){
    
    
        stack2.push(stack1.pop());
    }
    return stack2.pop();
}

猜你喜欢

转载自blog.csdn.net/qq_27575925/article/details/115169510
今日推荐