【力扣104】二叉树的最大深度
题目给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 12输入:root = [3,9,20,null,null,15,7]输出:3 示例 2: 12输入:root = [1,null,2]输出:2 提示: 树中节点的数量在 [0, 104] 区间内。 -100 <= Node.val <= 100 实现代码 通过二叉树的递归遍历(DFS)实现 方式一 前序遍历 1234567891011121314151617181920212223242526272829303132333435363738394041424344/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val)...
【力扣3】无重复字符的最长子串
题目给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 123输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 123输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 1234输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 提示: 0 <= s.length <= 5 * 104 s 由英文字母、数字、符号和空格组成 实现代码 和【力扣76】最小覆盖字串思路一样,使用双指针的滑动窗口来实现 12345678910111213141516171819class Solution { pub...
【力扣438】找到字符串中所有字母异位词
题目给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 12345输入: s = "cbaebabacd", p = "abc"输出: [0,6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。 示例 2: 123456输入: s = "abab", p = "ab"输出: [0,1,2]解释:起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。 提示: 1 <= s.len...
【力扣567】字符串的排列
题目给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的 排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 示例 1: 123输入:s1 = "ab" s2 = "eidbaooo"输出:true解释:s2 包含 s1 的排列之一 ("ba"). 示例 2: 12输入:s1= "ab" s2 = "eidboaoo"输出:false 提示: 1 <= s1.length, s2.length <= 104 s1 和 s2 仅包含小写字母 实现代码 和【力扣76】最小覆盖字串思路一样,使用双指针的滑动窗口来实现 12345678910111213141516171819202122232425262728293031323334353637383940414243class Solution { public boolean checkInclusion(String...
【力扣76】最小覆盖子串
题目给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 1: 123输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。 示例 2: 123输入:s = "a", t = "a"输出:"a"解释:整个字符串 s 是最小覆盖子串。 示例 3: 1234输入: s = "a", t = "aa"输出: ""解释: t 中两个字符 ...
【力扣5】最长回文子串
题目给你一个字符串 s,找到 s 中最长的 回文子串。 示例 1: 123输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。 示例 2: 12输入:s = "cbbd"输出:"bb" 提示: 1 <= s.length <= 1000 s 仅由数字和英文字母组成 实现代码 使用双指针方式,遍历字符串,每次都向两边扩散,判断是否形成回文串,并保存最大长度的回文字串,直到遍历结束; 注意:回文字串的大小可能为奇数或偶数,所以每次遍历都要考虑两种情况; 123456789101112131415161718192021222324class Solution { public String longestPalindrome(String s) { String maxStr = ""; for (int i = 0; i < s.length(); i++) {...
【力扣83】删除排序链表中的重复元素
题目给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 12输入:head = [1,1,2]输出:[1,2] 示例 2: 12输入:head = [1,1,2,3,3]输出:[1,2,3] 提示: 链表中节点数目在范围 [0, 300] 内 -100 <= Node.val <= 100 题目数据保证链表已经按升序 排列 实现代码 使用双指针方式,定义p1、p2,相同则p2移动一步,并且与p1进行连接,不相同则都往前移,p2到达链表尾部结束; 1234567891011121314151617181920212223242526272829/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.va...
【力扣26】删除有序数组中的重复项
题目给你一个 非严格递增排列 的数组 nums ,请你** 原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过: 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。 返回 k 。 判题标准: 系统会用下面的代码来测试你的题解: 123456789int[] nums = [...]; // 输入数组int[] expectedNums = [...]; // 长度正确的期望答案int k = removeDuplicates(nums); // 调用assert k == expectedNums.length;for (int i = 0; i < k; i++) { assert nums[i] == expectedNums[i];} 如果所有断...
【力扣167】两数之和II-输入有序数组
题目给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。 以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。 你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。 你所设计的解决方案必须只使用常量级的额外空间。 示例 1: 123输入:numbers = [2,7,11,15], target = 9输出:[1,2]解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。 示例 2: 123输入:numbers = [2,3,4], target = 6输出:[1,3]解释:2 与 4 之和等于目标数 6 。因此 index1 = 1, in...
【力扣344】反转字符串
题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。 示例 1: 12输入:s = ["h","e","l","l","o"]输出:["o","l","l","e","h"] 示例 2: 12输入:s = ["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"] 提示: 1 <= s.length <= 105 s[i] 都是 ASCII 码...














