LeetCode字符串
文章平均质量分 52
overlordmax
这个作者很懒,什么都没留下…
展开
-
678. 有效的括号字符串
1.题目描述给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:(1)任何左括号 ( 必须有相应的右括号 )。(2)任何右括号 ) 必须有相应的左括号 ( 。(3)左括号 ( 必须在对应的右括号之前 )。(4)∗*∗可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。(5)一个空字符串也被视为有效字符串。示例 1:示例 2:示例 3:注意:1.字符串大小将在 [1,100] 范围内。2.思路有效的字原创 2021-03-24 18:14:41 · 342 阅读 · 0 评论 -
43. 字符串相乘
1.题目描述给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:示例 2:说明:1.num1 和 num2 的长度小于110。2.num1 和 num2 只包含数字 0-9。3.num1 和 num2 均不以零开头,除非是数字 0 本身。4.不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。2.思路(1)乘数 num1 位数为 M,被乘数 num2 位数为 N,原创 2021-03-24 10:46:40 · 163 阅读 · 0 评论 -
227. 基本计算器 II
1.题目描述给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。示例 1:示例 2:示例 3:提示:(1)1 <= s.length <= 3 * 105(2)s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开(3)s 表示一个 有效表达式(4)表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内(5)题目数据保证答案是一个 32-bit 整数2.思路设置一个栈,对于加减号原创 2021-03-23 20:35:53 · 108 阅读 · 0 评论 -
468. 验证IP地址
1.题目描述编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。如果是有效的 IPv4 地址,返回 “IPv4” ;如果是有效的 IPv6 地址,返回 “IPv6” ;如果不是上述类型的 IP 地址,返回 “Neither” 。IPv4 地址由十进制数和点来表示,每个地址包含 4 个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。IPv6原创 2021-02-21 13:43:38 · 92 阅读 · 0 评论 -
415. 字符串相加
1.题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式2.思路1.设定 i,j 两指针分别指向 num1,num2 尾部,模拟人工加法;2. 计算 sum = n1 + n2 + carry,并将当前位 sum % 10 添加至 res 头部;3.原创 2021-01-26 10:47:57 · 64 阅读 · 0 评论 -
767. 重构字符串
1.题目描述给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例 1:示例 2:注意:S 只包含小写字母并且长度在[1, 500]区间内。2.思路1.如果要使得两相邻的字符不同,那么出现次数最多的那个数的数量必须满足下面条件,如下图所示,比如下面的a是出现次数最多的2.这个时候a的数量已经达到了临界值,如果再多一个 a ,那么至少有两个 a 是相邻的。所以这里出现次数最多的那个字符数量的临界值是threshol原创 2021-01-20 16:57:30 · 86 阅读 · 0 评论 -
将字符串转化为整数
1.题目描述实现函数 atoi 。函数的功能为将字符串转化为整数提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。示例12.思路1.处理空字符串2.忽略前置空格3.保存符号4.处理非法输入5.处理溢出3.代码class Solution {public: int atoi(const char *str) { int idx = 0; int sign = 1; int val = 0原创 2020-10-09 20:27:42 · 854 阅读 · 0 评论 -
171. Excel表列序号
1.题目描述给定一个Excel表格中的列名称,返回其相应的列序号。例如,示例 1:示例 2:示例 3:2.思路1.初始化结果 res= 0,遍历时将每个字母与 A 做减法,因为 A 表示 1,所以减法后需要每个数加 1,计算其代表的数值 num = 字母 - ‘A’ + 12.因为有 26 个字母,所以相当于 26 进制,每 26 个数则向前进一位3.所以每遍历一位则res= res* 26 + num4.以 ZY 为例,Z 的值为 26,Y 的值为 25,则结果为 26 * 2原创 2020-09-24 23:33:31 · 121 阅读 · 0 评论 -
131. 分割回文串
1.题目描述给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:2.思路对于这题要采用分割的思想,其核心也是回溯法,一条路走到底再回退。如图所示:每次调用backTrack函数就行一次分割,直到分割线处于最后一个元素之后将当前path压入集合。每次添加一条分割线,用ps记录下一次分割的起始位置,记得每次判断当前分割下来的字符串是否属于回文3.代码class Solution {public: vector<vector&原创 2020-09-09 17:38:47 · 131 阅读 · 0 评论 -
125. 验证回文串
1.题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:示例 2:2.思路直接在原字符串 s 上使用双指针。在移动任意一个指针时,需要不断地向另一指针的方向移动,直到遇到一个字母或数字字符,或者两指针重合为止。也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。3.代码class Solution {public: bool isPalindrom原创 2020-09-08 22:58:42 · 128 阅读 · 0 评论 -
49. 字母异位词分组
1.题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:说明:1.所有输入均为小写字母。2.不考虑答案输出的顺序。2.思路将每个字符串 str 转换为字符数 count,由26个非负整数组成,表示 a,b,c 的数量等,abbccc 将表示为 #1#2#3#0#0#0 …#0,其中总共有26个条目。3.代码class Solution {public: vector<vector<string>> grou原创 2020-08-30 19:46:32 · 96 阅读 · 0 评论 -
44. 通配符匹配
1.题目描述给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。两个字符串完全匹配才算匹配成功。说明:1.s 可能为空,且只包含从 a-z 的小写字母。2.p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:示例 2:示例 3:示例 4:示例 5:2.思路(动态规划)在给定的模式 p 中,只会有三种类型的字符出现:1.小写字母 a-z,可以匹配对应的一个小写字母;2.问号 ?,可以匹配任意一个小写字母原创 2020-08-28 20:09:08 · 492 阅读 · 0 评论 -
38. 外观数列
1.题目描述给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。注意:整数序列中的每一项将表示为一个字符串。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:第一项是数字 1描述前一项,这个数是 1 即 “一个 1 ”,记作 11描述前一项,这个数是 11 即 “两个 1 ” ,记作 21描述前一项,这个数是 21 即 “一个 2 一个 1 ” ,记作 1211描述前一项,这个数是 1211 即 “一个 1 一个 2 两个 1 ”原创 2020-08-26 19:35:57 · 97 阅读 · 0 评论 -
28. 实现 strStr()
1.题目描述实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:示例 2:说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。2.方法1最直接原创 2020-08-24 16:36:31 · 158 阅读 · 0 评论 -
13. 罗马数字转整数
1.题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:I 可以原创 2020-08-23 14:42:44 · 132 阅读 · 0 评论 -
6. Z 字形变换
1.题目描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:示例 1:示例 2:2.思路模拟Z字形遍历,字符串可变换的行数为numRows和字符串长度的最小值,遍历字符串,当遍历到第一行和最后一行时变换遍历的方向。3.代码class原创 2020-07-23 23:41:13 · 87 阅读 · 0 评论 -
696. 计数二进制子串
1.题目描述给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。示例 1 :示例 2 :注意:1.s.length 在1到50,000之间。2.s 只包含“0”或“1”字符。2.思路preLen表示上一分组的长度,curLen表示当前分组的长度,当s[i] == s[i-1]时,curLen++,当s[i] !=s[i-1]时,说明当前分组结束,preLen = curLen,且原创 2020-07-20 23:47:08 · 144 阅读 · 0 评论 -
205. 同构字符串
1.题目描述给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:示例 2:示例 3:说明:你可以假设 s 和 t 具有相同的长度。2.思路记录一个字符上次出现的位置,如果两个字符串中的字符上次出现的位置一样,那么就属于同构。3.代码class Solution {public: bo原创 2020-07-05 22:46:59 · 155 阅读 · 0 评论 -
409. 最长回文串
1.题目描述给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:2.思路 对于每个字符 ch,假设它出现了 v 次,我们可以使用该字符 v / 2 * 2 次,在回文串的左侧和右侧分别放置 v / 2 个字符 ch,其中 / 为整数除法。例如若 “a” 出现了 5 次,那么我们可以使用 “a” 的次数为 4,回文串的左右两侧分别放置 2 个原创 2020-07-05 21:42:15 · 344 阅读 · 0 评论 -
242. 有效的字母异位词
1.题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:示例 2:说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?2.思路用哈希表保存s字符串每个字符出现的次数,然后遍历t字符串,并把相应字符的个数减一,如果发现某个字符的次数不等于0,则返回false。3.代码class Solution {public: bool isAnagram(string原创 2020-07-05 21:03:45 · 139 阅读 · 0 评论 -
647. 回文子串
647. 回文子串1.题目描述给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:示例 2:注意:1.输入的字符串长度不会超过1000。2.思路中心扩展法: 在长度为 N 的字符串中,可能的回文串中心位置有 2N-1 个:字母,或两个字母中间。算法: 从每一个回文串中...原创 2020-04-28 00:03:36 · 104 阅读 · 0 评论 -
14. 最长公共前缀
14. 最长公共前缀1.题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:示例 2:说明:所有输入只包含小写字母 a-z 。2.方法1两两算出字符串之间的最长公共前缀,遍历完所有字符串之后得到答案3.代码class Solution {public: string longestCommonPrefix(ve...原创 2020-03-30 15:01:50 · 156 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi)1.题目描述写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字...原创 2020-03-30 14:12:38 · 95 阅读 · 0 评论 -
10. 正则表达式匹配
10. 正则表达式匹配1.题目描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:示例 1:示例 2:示例 3:示例 4:示例 5:2.思路(动态规划)1.状态:dp[i][j] 表示 s 的前 i 个是否能被 p 的前 j 个匹配2.转移方程:对于新...原创 2020-03-29 19:54:57 · 187 阅读 · 0 评论 -
22. 括号生成
22. 括号生成1.题目描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:2.方法1(dfs)我们以 n = 2 为例,画树形结构图。方法是 “做减法”。画图以后,可以分析出的结论:1.当前左右括号都有大于 0 个可以使用的时候,才产生分支;2.产生左分支的时候,只看当前是否还有左括号可以使用;3...原创 2020-03-07 23:02:47 · 101 阅读 · 0 评论 -
20. 有效的括号
20. 有效的括号1.题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:示例 2:示例 3:示例 4:示例 5:2.思路 利用栈,如果遇到左括号就把右括号入栈,如果遇到右括号,就比较和栈...原创 2020-03-07 22:04:21 · 109 阅读 · 0 评论 -
5. 最长回文子串
5. 最长回文子串1.题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:示例 2:2.方法1(中心扩展法) 如果一个字符串正着读和反着读是一样的,那它就是回文串。中心扩展算法:回文中心的两侧互为镜像。因此,回文可以从它的中心展开,并且只有 2n - 1 个这样的中心。因为回文的中心要区分单双。(1)假如回文的中心为两个数...原创 2020-03-07 20:38:22 · 128 阅读 · 0 评论 -
17. 电话号码的字母组合
17. 电话号码的字母组合1.题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。2.思路当给定了输入字符串,比如:“23”,那么整棵树就构建完成了,如下:问题转化成了从根节点到空节点一共有多少条路径;3....原创 2020-03-07 21:20:07 · 177 阅读 · 0 评论