子串
惠菁
我见过大海,看过繁星,但唯独遇见你,是我长久以来,所有奔赴的意义。
展开
-
【Java|golang】210. 课程表 II---拓扑排序
拓扑排序的定义:先引用一段百度百科上对于拓扑排序的定义:对一个有向无环图 ( Directed Acyclic Graph 简称 DAG ) G 进行拓扑排序,是将 G中所有顶点排成一个线性序列,使得图中任意一对顶点 u 和 v ,若边 < u , v > ∈ E ( G ),则 u 在线性序列中出现在 v之前。通常,这样的线性序列称为满足拓扑次序 ( Topological Order )的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。原创 2023-09-11 16:06:00 · 371 阅读 · 0 评论 -
【Java|golang】1041. 困于环中的机器人
在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意:北方向 是y轴的正方向。南方向 是y轴的负方向。东方向 是x轴的正方向。西方向 是x轴的负方向。机器人可以接受下列三条指令之一:"G":直走 1 个单位"L":左转 90 度"R":右转 90 度机器人按顺序执行指令 instructions,并一直重复它们。只有在平面中存在环使得机器人永远无法离开时,返回 true。否则,返回 false。原创 2023-04-12 18:15:00 · 998 阅读 · 0 评论 -
【Java|golang】1053. 交换一次的先前排列
给你一个正整数数组 arr(可能存在重复的元素),请你返回可在 一次交换(交换两数字 arr[i] 和 arr[j] 的位置)后得到的、按字典序排列小于 arr 的最大排列。如果无法这么操作,就请返回原数组。原创 2023-04-03 18:45:00 · 412 阅读 · 0 评论 -
【Java|golang】1641. 统计字典序元音字符串的数目---动态规划
给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。原创 2023-03-29 17:54:27 · 102 阅读 · 0 评论 -
【Java|golang】1616. 分割两个字符串得到回文串
给你两个字符串 a 和 b ,它们长度相同。请你选择一个下标,将两个字符串都在 相同的下标 分割开。由 a 可以得到两个字符串: aprefix 和 asuffix ,满足 a = aprefix + asuffix ,同理,由 b 可以得到两个字符串 bprefix 和 bsuffix ,满足 b = bprefix + bsuffix 。请你判断 aprefix + bsuffix 或者 bprefix + asuffix 能否构成回文串。原创 2023-03-20 12:14:50 · 240 阅读 · 0 评论 -
【Java|golang】1247. 交换字符使得字符串相同
有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 "x" 和 "y",你需要通过「交换字符」的方式使这两个字符串相同。原创 2023-03-07 18:45:00 · 362 阅读 · 0 评论 -
【Java|golang】1233. 删除子文件夹
你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。原创 2023-02-08 15:19:26 · 311 阅读 · 0 评论 -
【Java|golang】1781. 所有子字符串美丽值之和---桶排序
一个字符串的 美丽值 定义为:出现频率最高字符与出现频率最低字符的出现次数之差。原创 2022-12-12 11:09:37 · 92 阅读 · 0 评论 -
【Java|golang】1684. 统计一致字符串的数目
给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。原创 2022-11-08 10:27:47 · 125 阅读 · 0 评论 -
【Java|golang】1768. 交替合并字符串---byte->string
给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。原创 2022-10-25 10:20:39 · 165 阅读 · 0 评论 -
【java|golang】670. 最大交换---数字交换,时间复杂度O(N)
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。原创 2022-09-13 10:58:52 · 353 阅读 · 0 评论 -
【Java|golang】828. 统计子串中的唯一字符---子串!子串!子串
我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数。原创 2022-09-07 10:11:50 · 133 阅读 · 0 评论 -
【Java|golang】658. 找到 K 个最接近的元素
给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。原创 2022-08-25 10:54:35 · 251 阅读 · 0 评论 -
【Java】1417. 重新格式化字符串---双指针
请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。原创 2022-08-11 13:12:25 · 84 阅读 · 0 评论 -
【Java|golang】640. 求解方程---类型转化,字符串切割
求解一个给定的方程,将x以字符串 "x=#value" 的形式返回。该方程仅包含 '+' , '-' 操作,变量 x 和其对应系数。原创 2022-08-10 13:13:47 · 229 阅读 · 0 评论 -
【Java|golang】713. 乘积小于 K 的子数组---使用双指针,发掘连续数组的规律
给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。示例 1:输入:nums = [10,5,2,6], k = 100输出:8解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。示例 2:输入:nums = [1,2,3], k = 0输出:0提示:1 <= nums.len原创 2022-05-05 11:35:08 · 68 阅读 · 0 评论 -
【Java|golang】796. 旋转字符串---两行代码,解决字符串循环问题
给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。s 的 旋转操作 就是将 s 最左边的字符移动到最右边。例如, 若 s = ‘abcde’,在旋转一次之后结果就是’bcdea’ 。示例 1:输入: s = “abcde”, goal = “cdeab”输出: true示例 2:输入: s = “abcde”, goal = “abced”输出: false提示:1 <= s.length, goal.length <原创 2022-04-07 13:28:55 · 497 阅读 · 0 评论 -
【Java】258. 各位相加---时间复杂度O(1),一行代码。
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。示例 1:输入: num = 38输出: 2解释: 各位相加的过程为:38 --> 3 + 8 --> 1111 --> 1 + 1 --> 2由于 2 是一位数,所以返回 2。示例 1:输入: num = 0输出: 0提示:0 <= num <= 231 - 1进阶:你可以不使用循环或者递归,在 O(1) 时间复杂度内解决这个问题吗?public int ad原创 2022-03-03 14:02:56 · 379 阅读 · 0 评论 -
【Java】6. Z 字形变换---时间复杂度O(N),避免使用较多的判断语句
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入:s = “PAY原创 2022-03-01 10:36:47 · 123 阅读 · 0 评论 -
【Java】553. 最优除法---时间复杂度O(N),快速了解思路。
给定一组正整数,相邻的整数之间将会进行浮点除法操作。例如, [2,3,4] -> 2 / 3 / 4 。但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,才能得到最大的结果,并且返回相应的字符串格式的表达式。你的表达式不应该含有冗余的括号。示例:输入: [1000,100,10,2]输出: “1000/(100/10/2)”解释:1000/(100/10/2) = 1000/((100/10)/2) = 200但是,以下加粗的括号 “1000/((10原创 2022-02-28 10:33:16 · 298 阅读 · 0 评论 -
【Java】1078. Bigram 分词---先拆分,再对比,使集合转化成数组。
给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 “first second third” 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。对于每种这样的情况,将第三个词 “third” 添加到答案中,并返回答案。示例 1:输入:text = “alice is a good girl she is a good student”, first = “a”, second = “good”输出:[“girl”,“原创 2021-12-30 12:31:42 · 96 阅读 · 0 评论 -
【Java】1446. 连续字符---两种解决方案,时间复杂度O(N)。
给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。示例 1:输入:s = “leetcode”输出:2解释:子字符串 “ee” 长度为 2 ,只包含字符 ‘e’ 。示例 2:输入:s = “abbcccddddeeeeedcba”输出:5解释:子字符串 “eeeee” 长度为 5 ,只包含字符 ‘e’ 。示例 3:输入:s = “triplepillooooow”输出:5示例 4:输入:s = “hooraaaaaaaaa原创 2021-12-01 19:13:58 · 326 阅读 · 0 评论 -
【Java】391. 完美矩形---计算完美矩阵的四点坐标,并计算其面积得出完美矩阵,超详细解析。
给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。示例 1:输入:rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]]输出:true解释:5 个矩形一起可以精确地覆盖一个矩形区域原创 2021-11-16 10:35:06 · 1911 阅读 · 0 评论 -
【Java】869. 重新排序得到 2 的幂---两种解决方法,时间复杂度O(N)
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。示例 1:输入:1输出:true示例 2:输入:10输出:false示例 3:输入:16输出:true示例 4:输入:24输出:false示例 5:输入:46输出:true提示:1 <= N <= 10^9代码1:public boolean reorderedPowerOf2(int n)原创 2021-10-29 13:29:45 · 111 阅读 · 0 评论 -
【Java】434. 字符串中的单词数---题目简单但也不能粗心大意,不能用字符串的分割函数,会存在一些意想不到的结果!!!
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。示例:输入: “Hello, my name is John”输出: 5解释: 这里的单词是指连续的不是空格的字符,所以 “Hello,” 算作 1 个单词。代码:public static int countSegments(String s) { int count=0; s=" "+s; for(int i=0;i<s.leng原创 2021-10-07 22:40:14 · 70 阅读 · 0 评论 -
【Java】524. 通过删除字母匹配到字典里最长单词---使用lamda表达式对集合进行排序,通过双指针进行判断是否匹配,快速解决问题!!!
给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = “abpcplea”, dictionary = [“ale”,“apple”,“monkey”,“plea”]输出:“apple”示例 2:输入:s = “abpcplea”, dictionary = [“a”,“b”,“c”]输出:“a”原创 2021-09-14 21:22:35 · 106 阅读 · 0 评论 -
【Java】165. 比较版本号---使用字符串分割时,要注意转义字符!!!
给你两个版本号 version1 和 version2 ,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001原创 2021-09-01 20:51:13 · 132 阅读 · 0 评论 -
【Java】58. 最后一个单词的长度---时间复杂度O(N),进行倒序遍历字符串!!!
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = “Hello World”输出:5示例 2:输入:s = " fly me to the moon "输出:4示例 3:输入:s = “luffy is still joyboy”输出:6提示:1 <= s.length <= 104s 仅有英文字母和空格 ’ ’ 组成s 中至少原创 2021-08-29 17:45:33 · 113 阅读 · 0 评论 -
【Java】443. 压缩字符串---不仅要计算压缩后的长度,也要改变chars压缩后的字符!!!
给你一个字符数组 chars ,请使用下述算法压缩:从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :如果这一组长度为 1 ,则将字符追加到 s 中。否则,需要向 s 追加字符,后跟这一组的长度。压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。请在 修改完输入数组后 ,返回该数组的新长度。你必须设计并实现一个只使用常量额外空间的算法来解决此问题。示例原创 2021-08-21 10:54:47 · 117 阅读 · 0 评论 -
【Java】541. 反转字符串 II---快速使用StringBuilder解决字符串的反转和替换!!!
给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例 1:输入:s = “abcdefg”, k = 2输出:“bacdfeg”示例 2:输入:s = “abcd”, k = 2输出:“bacd”提示:1 <= s.length <= 104s 仅由小写英文组成1 <= k <= 104原创 2021-08-20 12:13:36 · 134 阅读 · 0 评论 -
【Java】516. 最长回文子序列---理解动态规划子公式,快速解决子问题!!!
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例 1:输入:s = “bbbab”输出:4解释:一个可能的最长回文子序列为 “bbbb” 。示例 2:输入:s = “cbbd”输出:2解释:一个可能的最长回文子序列为 “bb” 。提示:1 <= s.length <= 1000s 仅由小写英文字母组成代码:public int longestPalindro原创 2021-08-12 12:01:49 · 202 阅读 · 0 评论 -
【Java】392. 判断子序列---利用字符串的indexOf()方法,避免走弯路!!!
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?致谢:特别感谢 @pbrother 添加此问题并且创建所有测试用例。示例 1:输入:s = “abc”, t原创 2021-07-27 09:53:36 · 304 阅读 · 0 评论 -
【java】279. 完全平方数---使用动态规划,遍历不同的和!!!
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4 + 9提示:原创 2021-06-11 11:36:40 · 78 阅读 · 1 评论 -
【Java】518. 零钱兑换 II---使用动态规划,解决数组合成特定值的个数!!!
给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。示例 1:输入:amount = 5, coins = [1, 2, 5]输出:4解释:有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入:amount = 3, coins = [2]原创 2021-06-11 11:07:28 · 1218 阅读 · 2 评论 -
【Java】1049. 最后一块石头的重量 II---使用动态规划,求最靠近数组和sum/2的和!!!
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。示例 1:输入:stones = [2原创 2021-06-08 09:36:21 · 2358 阅读 · 1 评论 -
【java】494. 目标和---求数组某些元素部分和为特定值,最优算法,使用动态规划!!!
给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为 3 。-原创 2021-06-07 09:43:32 · 405 阅读 · 0 评论 -
【Java】474. 一和零---使用动态规划,解决两个变量问题,划重点!!!
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4 。其他满足题意但较原创 2021-06-06 09:08:35 · 178 阅读 · 0 评论 -
【Java】525. 连续数组--判断两相同元素之间的最大距离,快速解决问题!!!
给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量0和1的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。提示:1 <= nums.length <= 105nums[i] 不是 0 就是 1通过次数14,232提交次数29,原创 2021-06-03 09:29:20 · 699 阅读 · 0 评论 -
【Java】523. 连续的子数组和--快速入门,避免时间超时!!!
给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。示例 1:输入:nums = [23,2,4,6,7], k = 6输出:true解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。示例 2:输入:nums = [2原创 2021-06-02 11:09:24 · 181 阅读 · 0 评论 -
【java】664. 奇怪的打印机---使用深度搜索算法!!!
有台奇怪的打印机有以下两个特殊要求:打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。示例 1:输入:s = “aaabbb”输出:2解释:首先打印 “aaa” 然后打印 “bbb”。示例 2:输入:s = “aba”输出:2解释:首先打印 “aaa” 然后在第二个位置打印 “b” 覆盖掉原来的字符 ‘a’。提示:1 <= s.length原创 2021-05-24 11:40:59 · 118 阅读 · 0 评论