随笔分类 - 《程序员代码面试指南》刷题
摘要:括号字符串的有效性和最长有效长度 题目:括号字符串的有效性 & 括号字符串的最长有效长度 《程序员代码面试指南》第90题 P290 难度:原问题 士★☆☆☆ 补充问题 尉★★☆☆ 原问题。很简单,判断过程如下: 从左到右遍历字符串str,判断每一个字符是不是'('和')'。如果不是,就直接返回fal
阅读全文
摘要:翻转字符串 题目:翻转字符串(1) & 翻转字符串(2) 《程序员代码面试指南》第84题 P267 难度:士★☆☆☆ 太菜了,想半天想不出来额外空间复杂度O(1)的方法。 原问题,先把chas整体逆序,然后再遍历chas找到每一个单词,把每个单词里的字符逆序即可。 public void rotat
阅读全文
摘要:字符串的调整与替换 题目:字符串的调整II & 字符串的调整I 《程序员代码面试指南》第83题 P265 难度:士★☆☆☆ 原问题:遍历一遍,得到chas的左半区的长度len和左半区的空格数num。当空格被“%20”替代后,长度将是len×2+num。然后从左半区的最后一个字符开始逆序遍历,同时将字
阅读全文
摘要:删除多余字符得到字典序最小的字符串 题目:删除多余的字符得到字典序最小的字符串 《程序员代码面试指南》第86题 P276 难度:尉★★☆☆ 不太好做的题。。 概括一下思路,根据字频统计,遍历str时找到一个前缀str[0..R](遍历到字符的字频减1,某一种字符的字频统计为0时,停止遍历),然后在s
阅读全文
摘要:判断字符数组中是否所有的字符都只出现过一次 题目:判断数组中所有的数字是否只出现一次 《程序员代码面试指南》第81题 P261 难度:要求1:士★☆☆☆ 要求2:尉★★☆☆ 要求1很简单,时间复杂度为O(N),遍历一遍chas,用map记录每种字符的出现情况即可。书中使用了长度固定的数组,也可以使用
阅读全文
摘要:找到字符串的最长无重复字符子串 题目:找到字符串的最长无重复字符子串 《程序员代码面试指南》第94题 P300 难度:尉★★☆☆ 首先是几个变量的介绍:哈希表map,key表示某个字符,value为这个字符最近一次出现的位置。整型变量pre,如果当前遍历到字符str[i],pre表示在必须以str[
阅读全文
摘要:数组中两个字符串的最小距离 题目:数组中两个字符串的最小距离 《程序员代码面试指南》第87题 P279 难度:尉★★☆☆ 这题原问题很简单。从左到右遍历strs,用变量last1、last2分别记录最近一次出现的str1、str2的位置。如果遍历到str1,那么i-last2的值就是当前str1和左
阅读全文
摘要:回文最少分割数 题目:回文最少分割 《程序员代码面试指南》第98题 P314 难度:尉★★☆☆ 少有的做不出来的尉难度的题,但是这题在力扣上明明是hard!!!(不懂牛客&这本书怎么把这题定成简单(尉)的)。而且这题明明是动态规划题,却放在了字符串这一章,真的想不到用动态规划去做。就算知道用动态规划
阅读全文
摘要:字典树(前缀树)的实现 题目:字典树的实现 《程序员代码面试指南》第100题 P320 难度:尉★★☆☆ 字典树是一种树形结构,优点是利用字符串的公共前缀来节约存储空间,比如加入“abc”、“abcd”、“abd”、“b”、“bcd”、“efg”、“hik”之后,字典树如图: 字典树的基本性质如下:
阅读全文
摘要:判断两个字符串是否互为变形词 题目:判断两个字符串是否互为变形词 《程序员代码面试指南》第77题 P253 难度:士★☆☆☆ 这题很快做出来,不过和题解还是有差距的。 如果字符串str1和str2长度不同,直接返回false。如果长度相同,申请一个长度为256的整型数组map(假设字符的编码值在0~
阅读全文
摘要:跳跃游戏 题目:跳跃游戏 《程序员代码面试指南》第74题 P247 难度:士★☆☆☆ 这题在左神的书上是最简单的“士”难度,不过在力扣上起码是中等难度(力扣上跳跃游戏从I到VII,有中等有困难),自己做起来感觉不是特别简单,稍微想了一会儿。 书中具体过程如下: 定义整型变量jump,代表目前跳了多少
阅读全文
摘要:数组中的最长连续序列 题目:数组中的最长连续子序列 《程序员代码面试指南》第75题 P248 难度:尉★★☆☆ 这题我一上来想到先排序再找最长序列,不过就算使用最快的排序算法,时间复杂度也达到了O(NlogN),不符合题目要求的O(N)。 介绍两种解法: 首先是书中使用哈希表的解法: 生成哈希表ma
阅读全文
摘要:数字字符串转换为字母组合的种数 题目:数字字符转化为字母组合的种数 《程序员代码面试指南》第71题 P238 难度:尉★★☆☆ 这题不算很难,很快想出来,一个for循环了事,不过有些难理解。 我的思路是,假设数字字符串为“XXX...XXX”,那么“XXX...XXX”转换为字母组合的总数(记为p(
阅读全文
摘要:最小编辑代价 题目:最小编辑代价 《程序员代码面试指南》第68题 P230 难度:校★★★☆ 同样分为经典动态规划和经典动态规划结合空间压缩两种方法。 经典动态规划方法: 同样建立二维动态规划表,大小为(M+1)×(N+1)的矩阵dp,dp[i][j]的值代表str1[0..i-1]编辑成str2[
阅读全文
摘要:最长公共子序列问题 题目:最长公共子序列 《程序员代码面试指南》第65题 P220 难度:尉★★☆☆ 本题是非常经典的动态规划问题,先来介绍求解动态规划表的过程。如果str1的长度为M,str2的长度为N,生成大小为M×N的矩阵dp。dp[i][j]的含义是str1[0..i]与str2[0..j]
阅读全文
摘要:最长递增子序列 题目:最长递增子序列 《程序员代码面试指南》第62题 P210 难度:校★★★☆ 首先是时间复杂度为O(N2)的方法。 生成长度为N的数组dp,dp表示在以arr[i]这个数结尾的情况下,arr[0..i]中的最大递增子序列长度。 对第一个数arr[0]来说,令dp[0]=1,接下来
阅读全文
摘要:机器人达到指定位置方法数 题目:机器人达到指定位置方法数 《程序员代码面试指南》第59题 P192 难度:尉★★☆☆ 书上题目顺序安排极不合理,这题应该放在上一题的前面。上一题没做出来,大致看了下解析,对这题有一定启发,很快想出来了。 主要介绍一下本题提出的“用暴力递归解决的方法如何优化成动态规划”
阅读全文
摘要:矩阵的最小路径和 题目:矩阵的最小路径和 《程序员代码面试指南》第57题 P185 难度:尉★★☆☆ 本题看了迪杰斯特拉算法受到了启发,才想出来了。还是太菜了…… 经典动态规划方法: 简单来说,就是生成和原矩阵一样大小的矩阵dp,dp[i][j]的值表示从(0,0)位置走到(i,j)位置的最小路径和
阅读全文
摘要:斐波那契数列问题的递归和动态规划 题目:斐波那契数 & 爬楼梯 & 斐波那契数列问题的递归和动态规划3 《程序员代码面试指南》第56题 P179 难度:将★★★★ 这三个问题本质上都是斐波那契数列的问题。 首先是基本的斐波那契数问题。一共有三种解法。 第一种时间复杂度为O(2N),即暴力递归。(也是
阅读全文
摘要:调整搜索二叉树中的两个错误的节点 题目:找到搜索二叉树中两个错误的节点 《程序员代码面试指南》第41题 P137 难度:尉★★☆☆ (只看原问题,进阶问题难度将,解答不可能看的懂) 如果没有错误节点,那么搜索二叉树的中序遍历的节点值是一直升序的。如果有两个节点位置错了,就一定会出现降序。 出现降序有
阅读全文