小工具知识网

当前位置: 首页 > 行业知识 > 算法沉淀——动态规划之两个数组的 dp(下)(leetcode真题剖析)

行业知识

算法沉淀——动态规划之两个数组的 dp(下)(leetcode真题剖析)

2026-11-01 12:08:14 来源:互联网转载

算法沉淀——动态规划之两个数组的 dp

  • 01.正则表达式匹配
  • 02.交错字符串
  • 03.两个字符串的最小ASCII删除和
  • 04.���长重复子数组

    01.正则表达式匹配

    题目链接:https://leetcode.cn/problems/regular-expression-matching/

    给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

    • '.' 匹配任意单个字符
    • '*' 匹配零个或多个前面的那一个元素

      所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

      示例 1:

      输入:s = "aa", p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。

      示例 2:

      输入:s = "aa", p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。

      示例 3:

      输入:s = "ab", p = ".*"输出:true解释:".*" 表示可匹配零个或多个('*')任意字符('.')。 

      提示:

      • 1 public: bool isMatch(string s, string p) { int m=s.size(),n=p.size(); s=" "+s,p=" "+p; vector if(p[j]=='*') dp[i][j]=dp[i][j-2]||(p[j-1]=='.'||p[j-1]==s[i])&&dp[i-1][j]; else dp[i][j]=(p[j]==s[i]||p[j]=='.')&&dp[i-1][j-1]; } return dp[m][n]; }};public: bool isInterleave(string s1, string s2, string s3) { int m=s1.size(),n=s2.size(); if(s3.size()!=m+n) return false; s1=" "+s1,s2=" "+s2,s3=" "+s3; vectorpublic: int minimumDeleteSum(string s1, string s2) { int m=s1.size(),n=s2.size(); vector dp[i][j]=max(dp[i][j-1],dp[i-1][j]); if(s1[i-1]==s2[j-1]) dp[i][j]=max(dp[i][j],dp[i-1][j-1]+s1[i-1]); } int sum=0; for(auto s:s1) sum+=s; for(auto s:s2) sum+=s; return sum-dp[m][n]*2; }};public: int findLength(vector int m=nums1.size(),n=nums2.size(); vector

上一篇:SQL拆分字段内容(含分隔符)

下一篇:ipad怎么总是连接不到服务器?