首页 > 其他分享 > [leetcode]第 10 天 动态规划(中等)

[leetcode]第 10 天 动态规划(中等)

时间:2022-12-31 22:45:27浏览次数:48  
标签:tmp 10 翻译 字符 int res 中等 leetcode dp

46. 把数字翻译成字符串

思路

每个数字都有两种翻译情况,一种是和前一位数字一起被翻译,一种是单独被翻译。
状态定义:dp[i]表示以xi结尾的数字的翻译方案数量;
状态转移方程:
f(i) = f(i - 2) + f(i - 1), xi-1xi可以被翻译
f(i) = f(i - 1),xi-1xi不可被翻译
初始化:dp[0] = dp[1] = 1
返回值:dp[n]

class Solution {
    public int translateNum(int num) {
        String s = String.valueOf(num);
        int a = 1, b = 1;
        for(int i = 2; i <= s.length(); i++) {
            String tmp = s.substring(i - 2, i);
            int c = tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0 ? a + b : a;
            b = a;
            a = c;
        }
        return a;
    }
}

48. 最长不含重复字符的子字符串

思路

状态定义:dp[i]表示以字符s[i]结尾的满足条件的子串长度;
状态转移方程:
固定右边界 j ,设字符 s[j]左边距离最近的相同字符为s[i] ,即 s[i] = s[j]。

  1. i < 0, s[j]左边没有相同字符, dp[j] = dp[j - 1] + 1
  2. dp[j - 1] < j - i, s[i] 在子字符串dp[j - 1]区间之外, 则dp[j] = dp[j - 1] + 1;
  3. dp[j - 1] >= j - i, s[i] 在子字符串dp[j - 1]区间之内, 则dp[j] = j - i;
    返回值:max(dp)
class Solution {
    public int lengthOfLongestSubstring(String s) {
        Map<Character, Integer> dic = new HashMap<>();
        int res = 0, tmp = 0;
        for(int j = 0; j < s.length(); j++) {
            int i = dic.getOrDefault(s.charAt(j), -1); // 获取索引 i
            dic.put(s.charAt(j), j); // 更新哈希表
            tmp = tmp < j - i ? tmp + 1 : j - i; // dp[j - 1] -> dp[j]
            res = Math.max(res, tmp); // max(dp[j - 1], dp[j])
        }
        return res;
    }
}

标签:tmp,10,翻译,字符,int,res,中等,leetcode,dp
From: https://www.cnblogs.com/vincy9501/p/17017300.html

相关文章

  • leetcode-563. 二叉树的坡度
    563.二叉树的坡度-力扣(Leetcode)坡度的计算需要4个数左子树所有节点的和右子树所有结点的和左子树的坡度右子树的坡度左子树与右子树节点差值的绝对值为当前节点......
  • [leetcode]第 9 天 动态规划(中等)
    42.连续子数组的最大和思路状态定义:dp[i]表示以nums[i]结尾的连续子数组的最大和;状态转移方程:dp[i-1]>0,dp[i]=dp[i-1]+nums[i];dp[i-1]<=0,dp[i]=num......
  • leetcode-559. N 叉树的最大深度
    559.N叉树的最大深度-力扣(Leetcode)dfs/***DefinitionforaNode.*typeNodestruct{*Valint*Children[]*Node*}*/funcmaxDepth(roo......
  • Allure10-测试环境信息与趋势信息
    测试环境信息测试环境信息无法通过allure特性实现,需要借助环境配置文件配置文件名必须是environment.properties文件必须放在allure生成的结果数据目录中才能生效文......
  • LeetCode第 94 场双周赛
    1.最多可以摧毁的敌人城堡数目题目最多可以摧毁的敌人城堡数目Solution可以第一重循环找到\(1\),然后从该位置分别向左和向又寻找\(-1\),寻找过程中遇到\(1\)则停止,不......
  • win10 远程桌面和向日葵远控哪个好用
    win10远程桌面和向日葵远控哪个好用如今,远程办公已经成为许多在家工作,电子通勤的必备工作模式,这种工作方式的诞生,也让我们自由安排工作时间,少了很多上班通勤的时间,在家里......
  • LeetCode周赛325
    到目标字符串的最短距离题目SolutionclassSolution{public:intclosetTarget(vector<string>&words,stringtarget,intstartIndex){intn=wo......
  • leetcode笔记——二分图
    785.判断二分图-力扣(LeetCode)二分图实际上就是这个图里所有的环都是偶数个边,一般采取染色法来做通过dfs判断每个节点与其邻居节点是否是同一种颜色,如果有的话,那就一定......
  • #yyds干货盘点# LeetCode程序员面试金典:三步问题
    1.简述:三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示......
  • #yyds干货盘点# LeetCode程序员面试金典:迷路的机器人
    题目:设想有个机器人坐在一个网格的左上角,网格r行c列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路......