碎碎念:

亲爱的读者:你好!我的名字叫昌龙 【Changlon】 —— 一个非科班程序员、一个致力于前端的开发者、一个热爱生活且又时有忧郁的思考者。

如果我的文章能给你带来一些收获,你的点赞收藏将是对我莫大的鼓励!

我的邮箱:thinker_changlon@163.com

我的Github: https://github.com/Changlon

无论从事前端后端,不得不说算法才是决定一个程序员水平高低,工资收入的基石。算法能力也是一个程序员未来能走多远的一个决定性因素。小龙这里为大家总结了最新大厂面试题锦,为你的面试推波助力。

程序员之进大厂必刷算法题系列

数组
字符串
链表

哈希
二叉树
二分算法
分治算法(快排序)
动态规划
深度优先,广度优先算法
递归,回溯算法
贪心算法

文章目录

  • 一、NC141 判断回文
  • 二、NC31 第一个只出现一次的字符
  • 三、NC55 最长公共前缀
  • 四、NC103 反转字符串
  • 五、NC113 验证IP地址
  • 六、NC17 最长回文子串
  • 七、NC1 大数加法
  • 八、NC100 将字符串转化为整数
  • 九、NC149 kmp算法
  • 十、NC28 最小覆盖子串
  • 十 一、NC142 最长重复子串

一、NC141 判断回文

描述

给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。

示例1

输入: “absba”

返回值: true

示例2

输入: “ranko”

返回值: false

思路: 判断是否是回文字符串,就是从字符串的左边遍历和从右边遍历的效果是一样的。可以用双指针分别从前向后,和从右向前遍历,加入遇到不一样的字符就说明不是一个回文字符串。

function judge( str ) {let left = 0,right  = str.length-1 while(left<=right) {if(str[left]!=str[right])    return false left++,right--}return true
}

二、NC31 第一个只出现一次的字符

描述

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回
-1(需要区分大小写).(从0开始计数)

示例1

输入: “google”

返回值: 4

思路:维护一个map,先遍历一遍字符串,将每个字符以及其出现的次数存入map,接着再次遍历一遍字符串,查询每次遍历的字符出现的次数,如果次数为1则返回。没有返回-1

function FirstNotRepeatingChar(str){const map = new Map() for(let char of str) {if(!map.get(char)) {map.set(char,1)}else{map.set(char,map.get(char)+1) }}for(let i =0;i<str.length;++i) {const char = str[i] if(map.get(char)==1) {return i}}return -1}

三、NC55 最长公共前缀

描述 编写一个函数来查找字符串数组中的最长公共前缀。

示例1

输入: [“abca”,“abc”,“abca”,“abc”,“abcc”]

返回值: “abc”

思路:

  1. 将字符串数组按照字典集排序;
  2. 将第一个字符与最后一个进行比较。
function longestCommonPrefix(strs) {if(!strs||strs.length<=0) return ""if(strs.length==1) return strs[0]strs.sort() let len = strs.length let l = Math.min(strs[0].length,strs[len-1].length)let maxStr = ""for(let i=0;i<l;i++) {for(let j= i+1;j<l+1;j++) {let subStr = strs[0].substring(i,j) if(strs[len-1].indexOf(subStr)>=0) { maxStr = maxStr.length>subStr.length?maxStr:subStr}}}return maxStr}

四、NC103 反转字符串

描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

示例1

输入: “abcd”

返回值: “dcba”

思路1: 倒着遍历目标字符串,每次将字符赋给一个变量,最后就是反转的效果。
时间复杂度: O(n)

function solve( str ) {let ret = "" for(let i =str.length-1;i>=0;i--) {ret = ret + str[i]}return ret
}

思路2:双指针
时间复杂度: O(n/2)

function solve_( str ) {//由于js语言不能操作地址,所以先将str转为数组形式let strs = str.split('') let i =0,j = strs.length-1while(i<j) {let t = strs[i] strs[i] = strs[j] strs[j] = t i++j-- }return strs.join("")
}

五、NC113 验证IP地址

描述 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址

IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;
同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。

IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如,
2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0
开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的
IPv6 address地址 (即,忽略 0 开头,忽略大小写)。

然而,我们不能因为某个组的值为 0,而使用一个空的组,以至于出现 (:

前端程序员大厂面试精选100道算法题2相关推荐

  1. 程序员面试题精选100题

    程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 比如将二元查找树   ...

  2. [程序员面试题精选100题]13.第一个只出现一次的字符

    [题目] 在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b. [分析] [代码] /********************************* * 日期:2013- ...

  3. 程序员面试题精选100题(51)-顺时针打印矩阵

    // 程序员面试题精选100题(51)-顺时针打印矩阵.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <iostre ...

  4. 程序员面试题精选100题:求从1到n的正数中1出现的次数

    // 程序员面试题精选100题(25):求从1到n的正数中1出现的次数 // 如 f(253) = (2!=0) * 100 + 2 * f(99) + (5!=0) * 10 + 5 * f(9) ...

  5. 程序员面试题精选100题:41-50解题报告

    程序员面试题精选100题(41)-把数组排成最小的数[算法]   题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个.例如输入数组{32,  321},则输出这两个能 ...

  6. 程序员面试题精选100题:11-40解题报告

    程序员面试题精选100题(11)-求二元查找树的镜像[数据结构]   题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点.用递归和循环两种方法完成 ...

  7. 前端程序员怎么面试找工作?前端面试技巧分享

    我面试过很多前端程序员,非常了解面试者和面试官的心理,我可以很负责的告诉你: 就算面试你的人说你只能拿8K,但是你完全可以通过各种方法去拿到10K以上的薪资! 面试的时候面试官都是什么样的心理? 大多 ...

  8. 程序员面试题精选100题(30)-赋值运算符重载函数[C/C++/C#]

    问题:给出如下CMyString的声明,要求为该类型添加赋值运算符函数. class CMyString { public:     CMyString(char* pData = NULL);    ...

  9. BAT七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

最新文章

  1. 如何快速理解递归——看这个就可以了
  2. 唐骏给李开复泼冷水:创业不可复制
  3. 2017上海金马五校赛 丢史蒂芬妮 博弈问题
  4. php tool pagination,php实现分页工具类分享
  5. 对keep-alive组件的理解
  6. python tornado websocket_Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法...
  7. linux新建用户不显示,linux系统无法添加用户帐号的原因分析
  8. m-qam matlab,基于matlab的M_QAM通信系统仿真.doc
  9. Angular (Full App) with Angular Material, Angularfire NgRx 第3章 21节
  10. word保存不了磁盘已满_【Word技巧】word使用终极技巧,工程人必会(二)
  11. java中的oop是什么意思_什么是面向对象编程(OOP)?
  12. 题解 P2919 【[USACO08NOV]守护农场Guarding the Farm】
  13. 收藏多年的MySQL函数大全笔记,笔记一生一起走,那些日子不再有!
  14. 面试题:搜狐百度 看1 复杂一点的面试题 笔试题
  15. matlab pid buck,基于MATLAB的BUCK电路设计与PID闭环仿真
  16. 这是你不曾见过的最全的ASO应用市场优化方式(下篇)
  17. Python爬虫圈最能打的专栏教程,《Python爬虫120例》教程导航帖(2023.2.6更新)
  18. (OK) MIMP - 17 ( 5 nodes) - 抓包-缺少 MPTCP-JION - 节点1:服务器 mptcp-kmsg-server.txt
  19. 华硕主板禁用UEFI安全启动(Disable Secure Boot for ASUS Motherboard)
  20. 湖南农业大学计算机专业考研大纲,湖南农业大学842信息化概论2020年考研专业课初试大纲...

热门文章

  1. 树莓派cpu检测_利用xively监控树莓派的CPU温度
  2. cpu温度过高 ubuntu_如何在Ubuntu Linux中检查CPU温度
  3. 2020PMP(第六版)每日三题
  4. android-魔法泡泡动画分析(附源码)
  5. PHP count() empty() isset() 的应用
  6. STL算法——函数对象(仿函数)
  7. 【十分钟包学会】EndnoteX9搜索、管理文献快速上手教程(其他版本操作类似)
  8. js弹框,并指定的url
  9. 2017年「编码美丽」公众号优秀精华文章回顾,感谢有您的一路陪伴!
  10. 一年考研经历的回顾和总结(2)——不一样的辞职考研