字符串
文章平均质量分 50
leetcode中字符串类型题目
Sun_Sky_Sea
站在巨人的肩膀上
展开
-
212. 单词搜索 II
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。给定一个mxn二维字符网格board和一个单词(字符串)列表words,返回所有二维网格上的单词。把单词列表构建成前缀树,然后二维数组在前缀树中查找单词。...原创 2022-07-19 23:30:44 · 196 阅读 · 2 评论 -
65. 有效数字
原始题目链接:https://leetcode.cn/problems/valid-number/有效数字(按顺序)可以分成以下几个部分:一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(‘+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字一个点 ‘.’ ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可选)一个符号字符原创 2022-07-12 16:55:54 · 367 阅读 · 1 评论 -
301. 删除无效的括号
原始题目链接:https://leetcode.cn/problems/remove-invalid-parentheses/给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。示例 1:输入:s = “()())()”输出:[“(())()”,“()()()”]示例 2:输入:s = “(a)())()”输出:[“(a())()”,“(a)()()”]示例 3:输入:s = “)(”输出:[“”]提示:1 ..原创 2022-07-11 14:51:45 · 136 阅读 · 0 评论 -
318. 最大单词长度乘积
原始题目链接:https://leetcode.cn/problems/maximum-product-of-word-lengths/给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 。示例 1:输入:words = [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]输出:16解释:这两个单词为 “abcw”, “xtfn”。原创 2022-06-22 21:12:28 · 159 阅读 · 0 评论 -
389. 找不同
原始题目链接:https://leetcode.cn/problems/find-the-difference/给定两个字符串 s 和 t ,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例 1:输入:s = “abcd”, t = “abcde”输出:“e”解释:‘e’ 是那个被添加的字母。示例 2:输入:s = “”, t = “y”输出:“y”解题思路:代码实现:...原创 2022-06-20 23:32:53 · 101 阅读 · 0 评论 -
392. 判断子序列
原始题目链接:https://leetcode.cn/problems/is-subsequence/给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?示例 1:输入:s = “原创 2022-06-20 23:05:10 · 139 阅读 · 0 评论 -
409. 最长回文串
原始题目链接:https://leetcode.cn/problems/longest-palindrome/给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。在构造过程中,请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。示例 1:输入:s = “abccccdd”输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。示例 2:输入:s = “a”输入:1示例 3:输入:s = “bb”输入: 2提示:1 ...原创 2022-06-19 23:30:29 · 252 阅读 · 0 评论 -
10. 正则表达式匹配
原始题目链接:https://leetcode.cn/problems/regular-expression-matching/给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa”, p = “a”输出:false解释:“a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”, p =原创 2022-06-18 15:20:55 · 251 阅读 · 0 评论 -
72. 编辑距离
原始题目链接:https://leetcode.cn/problems/edit-distance/给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros原创 2022-06-15 23:52:26 · 65 阅读 · 0 评论 -
241. 为运算表达式设计优先级
原始题目链接:https://leetcode.cn/problems/different-ways-to-add-parentheses/给你一个由数字和运算符组成的字符串 expression ,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以 按任意顺序 返回答案。示例 1:输入:expression = “2-1-1”输出:[0,2]解释:((2-1)-1) = 0(2-(1-1)) = 2示例 2:输入:expression = “23-45”输出:[-34,-14,原创 2022-06-15 15:23:09 · 188 阅读 · 0 评论 -
242. 有效的字母异位词
原始题目链接:https://leetcode.cn/problems/valid-anagram/给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false提示:1 ...原创 2022-06-15 14:40:32 · 75 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
原始题目链接:https://leetcode.cn/problems/implement-trie-prefix-tree/Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word原创 2022-06-14 20:13:21 · 84 阅读 · 0 评论 -
211. 添加与搜索单词 - 数据结构设计
原始题目链接:https://leetcode.cn/problems/implement-trie-prefix-tree/Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word原创 2022-06-13 17:51:39 · 124 阅读 · 0 评论 -
205. 同构字符串
原始题目链接:https://leetcode.cn/problems/isomorphic-strings/给定两个字符串 s 和 t ,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。示例 1:输入:s = “egg”, t = “add”输出:true示例 2:输入:s = “foo”, t = “b原创 2022-06-13 11:17:24 · 64 阅读 · 0 评论 -
187. 重复的DNA序列
原始题目链接:https://leetcode.cn/problems/repeated-dna-sequences/DNA序列 由一系列核苷酸组成,缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。例如,“ACGAATTCCG” 是一个 DNA序列 。在研究 DNA 时,识别 DNA 中的重复序列非常有用。给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。示例 1:输入:s = “AAAAACCCCCAAA原创 2022-06-13 10:23:40 · 166 阅读 · 0 评论 -
168. Excel表列名称
原始题目链接:https://leetcode.cn/problems/excel-sheet-column-title/给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。例如:A -> 1B -> 2C -> 3…Z -> 26AA -> 27AB -> 28…示例 1:输入:columnNumber = 1输出:“A”示例 2:输入:columnNumber = 28输出:“AB”示例 3:输入:columnNumber = 701输出:“ZY”原创 2022-06-12 14:27:49 · 153 阅读 · 0 评论 -
171. Excel 表列序号
原始题目链接:https://leetcode.cn/problems/excel-sheet-column-number/给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。例如:A -> 1B -> 2C -> 3…Z -> 26AA -> 27AB -> 28…示例 1:输入: columnTitle = “A”输出: 1示例 2:输入: columnTitle = “AB”输出: 28示例 3:输入: columnTitle原创 2022-06-12 13:55:00 · 241 阅读 · 0 评论 -
166. 分数到小数
原始题目链接:https://leetcode.cn/problems/fraction-to-recurring-decimal/给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回 任意一个 。对于所有给定的输入,保证 答案字符串的长度小于 104 。示例 1:输入:numerator = 1, denominator = 2输出:“0.5”示例 2:输入:nume原创 2022-06-10 17:16:34 · 120 阅读 · 0 评论 -
165. 比较版本号
原始题目链接:https://leetcode.cn/problems/compare-version-numbers/给你两个版本号 version1 和 version2 ,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。比较版本号时,请按从左到右的顺原创 2022-06-10 11:29:22 · 148 阅读 · 0 评论 -
30. 串联所有单词的子串
原始题目链接:https://leetcode.cn/problems/substring-with-concatenation-of-all-words/给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = “barfoothefoobarman”, words = [“foo”,“bar”]输原创 2022-06-07 17:26:54 · 164 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
原始题目链接:https://leetcode.cn/problems/string-to-integer-atoi/请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下原创 2022-06-06 19:11:19 · 100 阅读 · 0 评论 -
6. Z 字形变换
原始题目链接:https://leetcode.cn/problems/zigzag-conversion/将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string原创 2022-06-06 11:50:45 · 77 阅读 · 0 评论 -
214. 最短回文串
字符串原创 2022-06-05 22:11:41 · 704 阅读 · 0 评论 -
451. 根据字符出现频率排序
451. 根据字符出现频率排序原始题目链接:https://leetcode.cn/problems/sort-characters-by-frequency/给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。返回 已排序的字符串 。如果有多个答案,返回其中任何一个。示例 1:输入: s = “tree”输出: “eert”解释: 'e’出现两次,'r’和’t’都只出现一次。加粗样式因此’e’必须出现在’r’和’t’之前。此外,原创 2022-05-22 11:39:01 · 653 阅读 · 0 评论 -
394. 字符串解码
1382. 将二叉搜索树变平衡原始题目链接:https://leetcode-cn.com/problems/balance-a-binary-search-tree/给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果有多种构造方法,请你返回任意一种。如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平衡的 。解题思路:先把节点保存到一个数组中,使用中序遍历二叉搜索树,这样得到的是一个有序的数组,退化成1原创 2022-05-01 11:29:04 · 1492 阅读 · 0 评论 -
32. 最长有效括号
32. 最长有效括号原始题目链接:https://leetcode-cn.com/problems/longest-valid-parentheses/给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。解题思路:容易想到的方法是用栈的数据结构,这样的算法空间复杂度都是O(n)。始终保持栈底元素为当前已经遍历过的元素中「最后一个没有被匹配的右括号的下标」,如果一开始栈为空,第一个字符为左括号的时候我们会将其放入栈中,这样就不满足,所以刚开始插入-1,栈里其原创 2021-11-21 22:41:06 · 478 阅读 · 0 评论 -
179. 最大数
179. 最大数原始题目链接:https://leetcode-cn.com/problems/largest-number/给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。解题思路:先将数组中的数字都转换成字符串,为了避免后面进行两两比较而可能产生的类型(int long)溢出的情况,转换成字符串数组后,字符串数组内的所有元素都会进行两两拼接然后比较大小。比较完后,将大的结果保留在数组的前原创 2021-06-28 11:15:57 · 73 阅读 · 0 评论 -
583. 两个字符串的删除操作
583. 两个字符串的删除操作原始题目链接:https://leetcode-cn.com/problems/delete-operation-for-two-strings/给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例:输入: “sea”, “eat”输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"解题思路:转换为两个字符串的长度之和减去两个字符串的最长公共原创 2021-06-20 21:07:19 · 153 阅读 · 0 评论 -
97. 交错字符串
97. 交错字符串原始题目链接:https://leetcode-cn.com/problems/interleaving-string/给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + … + snt = t1 + t2 + … + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 +原创 2021-06-10 14:11:41 · 119 阅读 · 0 评论 -
93. 复原 IP 地址
93. 复原 IP 地址原始题目链接:https://leetcode-cn.com/problems/restore-ip-addresses/给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.25原创 2021-06-09 16:41:51 · 79 阅读 · 0 评论 -
43. 字符串相乘
43. 字符串相乘原始题目链接:https://leetcode-cn.com/problems/multiply-strings/给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。解题思路:这道题不准使用字符串直接转换整型数据来计算,这样就需要模拟乘法操作来计算。一种方式是竖式乘法:从右至左遍历乘数num2,将乘数num2的每一位数字与被乘数num1相乘,得到的结果进行累加。具体实现看代码及注释。代码实现:cl原创 2021-06-07 23:34:42 · 76 阅读 · 0 评论 -
316. 去除重复字母
316. 去除重复字母原始题目链接:https://leetcode-cn.com/problems/remove-duplicate-letters/给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。解题思路:思路和402题的思路一样,使用栈来存储和比较相邻字符的入栈出栈条件,具体实现看代码和注释。代码实现:class Solution: def removeDuplicateLetters(原创 2021-06-05 19:19:03 · 160 阅读 · 0 评论 -
402. 移掉K位数字
402. 移掉K位数字原始题目链接:https://leetcode-cn.com/problems/remove-k-digits/给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。解题思路:移掉k位数字,就是最后保留len(num) - k位数字,从左到右遍历数字字符串num,每次筛选的时候需要比较数字的大小,并且开始比较的位置是与当前位置左侧相邻的字符,即从右到左,所以原创 2021-06-05 18:27:05 · 114 阅读 · 0 评论 -
647. 回文子串
647. 回文子串原始题目链接:https://leetcode-cn.com/problems/palindromic-substrings/给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。解题思路:这道题和 5.最长回文子串https://blog.csdn.net/u013243296/article/details/117423343这道题类似,就想到了使用动态规划来解题,状态是dp[i][j原创 2021-06-05 17:15:10 · 85 阅读 · 0 评论 -
151. 翻转字符串里的单词
151. 翻转字符串里的单词原始题目链接:https://leetcode-cn.com/problems/reverse-words-in-a-string/给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面或者单词间包含多余的空格。翻转后单词间应当仅用一个空格分隔。翻转后的字符串中不应包含额外的空格。解原创 2021-06-03 17:34:43 · 153 阅读 · 0 评论 -
17. 电话号码的字母组合
17. 电话号码的字母组合原始题目链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。解题思路:这道题很容易想到排列组合,所以使用回溯法来解题。回溯法是个专题,后面会专题去做,注意回溯的地方,具体实现看代码及注释。代码实现:cla原创 2021-06-01 22:48:50 · 71 阅读 · 0 评论 -
22. 括号生成
22. 括号生成原始题目链接:https://leetcode-cn.com/problems/generate-parentheses/数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。解题思路:这类题可以转换为在一棵树上进行遍历求解,树的遍历解题一般会想到深度优先遍历(DFS)和广度优先遍历(BFS),DFS使用数据结构栈来解题,BFS使用队列来解题。这道题可考虑使用DFS解题,定义一个DFS函数:用来构建有效括号的组会,初始状态为空字符串,参数有4原创 2021-05-31 20:25:27 · 77 阅读 · 0 评论 -
5. 最长回文子串
5. 最长回文子串原始题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/给你一个字符串 s,找到 s 中最长的回文子串。解题思路:使用动态规划思路解题。定义状态dp[i][j]表示字符串s的子串s[i: j + 1](字符串第i个字符到第j个字符的闭区间的子串)是否是回文串,所以初始化动态方程数组dp[][]的值使用布尔运算符False,特别地对角线表示i和j是相等的,即单个字符,肯定是回文,所以初始化的时候赋原创 2021-05-31 17:48:02 · 66 阅读 · 0 评论 -
686. 重复叠加字符串匹配
686. 重复叠加字符串匹配原始题目链接:https://leetcode-cn.com/problems/repeated-string-match/给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1。注意:字符串 “abc” 重复叠加 0 次是 “”,重复叠加 1 次是 “abc”,重复叠加 2 次是 “abcabc”。解题思路:先判断两个提前结束的条件,1、a和b相等直接返回1,2、如果b中的字符种类个原创 2021-05-21 19:31:26 · 100 阅读 · 0 评论 -
1170. 比较字符串最小字母出现频次
1170. 比较字符串最小字母出现频次原始题目链接:https://leetcode-cn.com/problems/compare-strings-by-frequency-of-the-smallest-character/定义一个函数 f(s),统计 s 中(按字典序比较)最小字母的出现频次 ,其中 s 是一个非空字符串。例如,若 s = “dcce”,那么 f(s) = 2,因为字典序最小字母是 “c”,它出现了 2 次。现在,给你两个字符串数组待查表 queries 和词汇表 words原创 2021-05-18 17:45:56 · 219 阅读 · 0 评论