From 066c1313adead33e2e14b27881593df28498c73d Mon Sep 17 00:00:00 2001 From: algorithmzuo Date: Tue, 4 Apr 2023 19:20:06 +0800 Subject: [PATCH] modify code --- .../mca_09/Code01_ExpressionCompute.java | 7 +++++- ...stSubstringWithoutRepeatingCharacters.java | 3 ++- .../mca_09/Code03_MinWindowLength.java | 7 +++++- .../第03期/mca_09/Code05_CoinChange.java | 4 ++++ .../Code06_LongestCommonSubsequence.java | 23 ++++++++++++------- .../mca_09/Code07_RegularExpressionMatch.java | 7 +++++- 6 files changed, 39 insertions(+), 12 deletions(-) diff --git a/MCA算法突击课/第03期/mca_09/Code01_ExpressionCompute.java b/MCA算法突击课/第03期/mca_09/Code01_ExpressionCompute.java index 520ed75..79628f0 100644 --- a/MCA算法突击课/第03期/mca_09/Code01_ExpressionCompute.java +++ b/MCA算法突击课/第03期/mca_09/Code01_ExpressionCompute.java @@ -2,7 +2,12 @@ package 第03期.mca_09; import java.util.LinkedList; -// 本题测试链接 : https://leetcode.com/problems/basic-calculator-iii/ +// 实现一个基本的计算器来计算简单的表达式字符串。 +// 表达式字符串只包含非负整数,算符 +、-、*、/ ,左括号 ( 和右括号 ) +// 整数除法需要 向下截断 +// 你可以假定给定的表达式总是有效的。所有的中间结果的范围均满足 [-231, 231 - 1] +// 注意:你不能使用任何将字符串作为表达式求值的内置函数,比如 eval() +// 本题测试链接 : https://leetcode.cn/problems/basic-calculator-iii/ public class Code01_ExpressionCompute { public static int calculate(String str) { diff --git a/MCA算法突击课/第03期/mca_09/Code02_LongestSubstringWithoutRepeatingCharacters.java b/MCA算法突击课/第03期/mca_09/Code02_LongestSubstringWithoutRepeatingCharacters.java index e5cee08..2d92495 100644 --- a/MCA算法突击课/第03期/mca_09/Code02_LongestSubstringWithoutRepeatingCharacters.java +++ b/MCA算法突击课/第03期/mca_09/Code02_LongestSubstringWithoutRepeatingCharacters.java @@ -1,6 +1,7 @@ package 第03期.mca_09; -// 本题测试链接 : https://leetcode.com/problems/longest-substring-without-repeating-characters/ +// 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 +// 测试链接 : https://leetcode.cn/problems/longest-substring-without-repeating-characters/ public class Code02_LongestSubstringWithoutRepeatingCharacters { public static int lengthOfLongestSubstring(String s) { diff --git a/MCA算法突击课/第03期/mca_09/Code03_MinWindowLength.java b/MCA算法突击课/第03期/mca_09/Code03_MinWindowLength.java index 0a67c24..0b3875a 100644 --- a/MCA算法突击课/第03期/mca_09/Code03_MinWindowLength.java +++ b/MCA算法突击课/第03期/mca_09/Code03_MinWindowLength.java @@ -1,6 +1,11 @@ package 第03期.mca_09; -// 测试链接 : https://leetcode.com/problems/minimum-window-substring/ +// 给你一个字符串 s 、一个字符串 t +// 返回 s 中涵盖 t 所有字符的最小子串 +// 如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 +// 注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量 +// 如果 s 中存在这样的子串,我们保证它是唯一的答案 +// 测试链接 : https://leetcode.cn/problems/minimum-window-substring/ public class Code03_MinWindowLength { public static String minWindow(String s, String t) { diff --git a/MCA算法突击课/第03期/mca_09/Code05_CoinChange.java b/MCA算法突击课/第03期/mca_09/Code05_CoinChange.java index 6b65cdb..28594e4 100644 --- a/MCA算法突击课/第03期/mca_09/Code05_CoinChange.java +++ b/MCA算法突击课/第03期/mca_09/Code05_CoinChange.java @@ -1,5 +1,9 @@ package 第03期.mca_09; +// 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额 +// 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 +// 假设每一种面额的硬币有无限个 +// 题目数据保证结果符合 32 位带符号整数 // 测试链接 : https://leetcode.cn/problems/coin-change-ii/ public class Code05_CoinChange { diff --git a/MCA算法突击课/第03期/mca_09/Code06_LongestCommonSubsequence.java b/MCA算法突击课/第03期/mca_09/Code06_LongestCommonSubsequence.java index 5cdec06..d30ced1 100644 --- a/MCA算法突击课/第03期/mca_09/Code06_LongestCommonSubsequence.java +++ b/MCA算法突击课/第03期/mca_09/Code06_LongestCommonSubsequence.java @@ -1,7 +1,14 @@ package 第03期.mca_09; +// 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度 +// 如果不存在 公共子序列 ,返回 0 +// 一个字符串的 子序列 是指这样一个新的字符串: +// 它是由原字符串在不改变字符的相对顺序的情况下 +// 删除某些字符(也可以不删除任何字符)后组成的新字符串 +// 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列 +// 两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列 // 这个问题leetcode上可以直接测 -// 链接:https://leetcode.com/problems/longest-common-subsequence/ +// 链接:https://leetcode.cn/problems/longest-common-subsequence/ public class Code06_LongestCommonSubsequence { public static int longestCommonSubsequence1(String s1, String s2) { @@ -24,16 +31,16 @@ public class Code06_LongestCommonSubsequence { // 但是可以肯定,答案不会超过这四种可能性的范围 // 那么我们分别来看一下,这几种可能性怎么调用后续的递归。 // a) 最长公共子序列,一定不以str1[i]字符结尾、也一定不以str2[j]字符结尾 - // 如果是这种情况,那么有没有str1[i]和str2[j]就根本不重要了,因为这两个字符一定没用啊 - // 所以砍掉这两个字符,最长公共子序列 = str1[0...i-1]与str2[0...j-1]的最长公共子序列长度(后续递归) + // 如果是这种情况,那么有没有str1[i]和str2[j]就根本不重要了,因为这两个字符一定没用啊 + // 所以砍掉这两个字符,最长公共子序列 = str1[0...i-1]与str2[0...j-1]的最长公共子序列长度(后续递归) // b) 最长公共子序列,可能以str1[i]字符结尾、但是一定不以str2[j]字符结尾 - // 如果是这种情况,那么我们可以确定str2[j]一定没有用,要砍掉;但是str1[i]可能有用,所以要保留 - // 所以,最长公共子序列 = str1[0...i]与str2[0...j-1]的最长公共子序列长度(后续递归) + // 如果是这种情况,那么我们可以确定str2[j]一定没有用,要砍掉;但是str1[i]可能有用,所以要保留 + // 所以,最长公共子序列 = str1[0...i]与str2[0...j-1]的最长公共子序列长度(后续递归) // c) 最长公共子序列,一定不以str1[i]字符结尾、但是可能以str2[j]字符结尾 - // 跟上面分析过程类似,最长公共子序列 = str1[0...i-1]与str2[0...j]的最长公共子序列长度(后续递归) + // 跟上面分析过程类似,最长公共子序列 = str1[0...i-1]与str2[0...j]的最长公共子序列长度(后续递归) // d) 最长公共子序列,必须以str1[i]字符结尾、也必须以str2[j]字符结尾 - // 同时可以看到,可能性d)存在的条件,一定是在str1[i] == str2[j]的情况下,才成立的 - // 所以,最长公共子序列总长度 = str1[0...i-1]与str2[0...j-1]的最长公共子序列长度(后续递归) + 1(共同的结尾) + // 同时可以看到,可能性d)存在的条件,一定是在str1[i] == str2[j]的情况下,才成立的 + // 所以,最长公共子序列总长度 = str1[0...i-1]与str2[0...j-1]的最长公共子序列长度(后续递归) + 1(共同的结尾) // 综上,四种情况已经穷尽了所有可能性。四种情况中取最大即可 // 其中b)、c)一定参与最大值的比较, // 当str1[i] == str2[j]时,a)一定比d)小,所以d)参与 diff --git a/MCA算法突击课/第03期/mca_09/Code07_RegularExpressionMatch.java b/MCA算法突击课/第03期/mca_09/Code07_RegularExpressionMatch.java index 446346b..39fa542 100644 --- a/MCA算法突击课/第03期/mca_09/Code07_RegularExpressionMatch.java +++ b/MCA算法突击课/第03期/mca_09/Code07_RegularExpressionMatch.java @@ -1,6 +1,11 @@ package 第03期.mca_09; -// 测试链接 : https://leetcode.com/problems/regular-expression-matching/ +// 给你一个字符串 s 和一个字符规律 p +// 请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 +// '.' 匹配任意单个字符 +// '*' 匹配零个或多个前面的那一个元素 +// 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 +// 测试链接 : https://leetcode.cn/problems/regular-expression-matching/ public class Code07_RegularExpressionMatch { public static boolean isValid(char[] s, char[] e) {