567. 字符串的排列(一般)
567. 字符串的排列(一般)给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
示例 1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 (“ba”).
示例 2:输入: s1= "ab" s2 = "eidboaoo"输出: False
提示:
输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutation-in-string
思路:滑动窗口,类比438
代码1:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758class Solution { ...
438. 找到字符串中所有字母异位词(困难)
438. 找到字符串中所有字母异位词(困难)给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。
字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。
说明:
字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。
示例 1:123456789输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的字母异位词。
示例 2:12345678910输入:s: "abab" p: "ab"输出:[0, 1, 2]解释:起始索引等于 0 的子串是 "ab", 它是 "ab" 的字母异位词。起始索引等于 1 的子串是 "ba", ...
76. 最小覆盖子串(困难)
76. 最小覆盖子串(困难)给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。
示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"
示例 2:输入:s = "a", t = "a"输出:"a"
提示:
1 <= s.length, t.length <= 10<sup>5s 和 t 由英文字母组成
来源:力扣(LeetCode)
https://leetcode-cn.com/problems/minimum-window-substring/
思路:滑动窗口模板
代码:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474 ...
344. 反转字符串(简单)
344. 反转字符串(简单)编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]
示例 2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]
来源:力扣(LeetCode)链接:ht ...
78. 子集(简单)
78. 子集(简单)给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:输入:nums = [0]输出:[[],[0]]
提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中的所有元素 互不相同
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets
思路:回溯
代码:12345678910111213141516171819class Solution { List<List<Integer>> res; public List<List<Integer>> subsets(int[] nums) { res = ...
72. 编辑距离(较难)
72. 编辑距离(较难)给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:
123horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')
示例 2:输入:word1 = "intention", word2 = "execution"输出:5解释:
12345intention -> inention (删除 't')inention -> enention (将 'i' 替换为 'e')enention -> exention (将 ...
516. 最长回文子序列(一般)
516. 最长回文子序列(一般)给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。
示例 1:输入:"bbbab"输出:4一个可能的最长回文子序列为 “bbbb”。
示例 2:输入:"cbbd"输出:2一个可能的最长回文子序列为 “bb”。
提示:1 <= s.length <= 1000s 只包含小写英文字母
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence
思路:动态规划,dp[i ] [j]表示为最长回文子串的长度
代码1:1234567891011121314151617181920class Solution { public int longestPalindromeSubseq(String s) { int len = s.length(); int[][] dp = new int[s.l ...
300. 最长递增子序列(一般)
300. 最长递增子序列(一般)给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。
示例 2:输入:nums = [0,1,0,3,2,3]输出:4
示例 3:输入:nums = [7,7,7,7,7,7,7]输出:1
提示:1 <= nums.length <= 2500-104 <= nums[i] <= 104
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-increasing-subsequence
思路:dp[i] 表示以 nums[i]结尾的最长递增子序列的长度
代码:12345678910111213141516171819class Solution ...
701. 二叉搜索树中的插入操作(一般)
701. 二叉搜索树中的插入操作(一般)给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
示例 1:
输入:root = [4,2,7,1,3], val = 5
输出:[4,2,7,1,3,5]
解释:另一个满足题目要求可以通过的树是:
示例 2:输入:root = [40,20,60,10,30,50,70], val = 25输出:[40,20,60,10,30,50,70,null,null,25]
示例 3:输入:root = [4,2,7,1,3,null,null,null,null,null,null], val = 5输出:[4,2,7,1,3,5]
提示:
给定的树上的节点数介于 0 和 10^4 之间每个节点都有一个唯一整数值,取值范围从 0 到 10^8-10^8 <= val <= 10^8新值和原始二叉搜索树中的任意节点值都不 ...
700. 二叉搜索树中的搜索(简单)
700. 二叉搜索树中的搜索(简单)给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
例如,
给定二叉搜索树:
4
/ \
2 7
/ \
1 3
和值: 2你应该返回如下子树:
2
/ \
1 3
在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/search-in-a-binary-search-tree
思路:常规二叉搜索树递归
代码:1234567891011class Solution { public TreeNode searchBST(TreeNode root, int val) { return searchBSTHelper(root,val); } TreeNode searchBSTHelper(TreeNo ...