剑指offer day10 动态规划(中等)
day10题目:剑指 Offer 46. 把数字翻译成字符串、剑指 Offer 48. 最长不含重复字符的子字符串
知识点:字符串、动态规划、滑动窗口,难度为中等、中等
学习计划链接:「剑指 Offer」 - 学习计划
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
提示:
0 <= num < 2^31
思路及代码
类似前些天刷的打家劫舍,状态若能跟前面的组合翻译,则 dp[i] = dp[i-1]+dp[i-2]
(单独翻译+组合翻译),否则 dp[i] = dp[i-1]
(单独翻译),同样可以用滚动数组优化。
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
示例 2:
示例 3:
提示:
s.length <= 40000
注意:本题与主站 3 题相同:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
思路及代码
当时的思路是滑动窗口,进入窗口的字符若为重复(用hash存判断)的则将左侧窗口滑至该字符(并将hash中相应的key删除)同时记录长度,再继续滑动。
现在改了改,可以不用删除,hash存下标,get的时候判断下是否位于l~r的区间中就好了
最后更新于