
字符串
文章平均质量分 56
hestyle
戎码一生!
展开
-
字符串匹配KMP算法详解(这可能是东半球最好理解的解释)
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。累赘一下,KMP算法是字符串匹配算法,比如搜索字符串“abcdefg”中是否含有子串“bcd”。下面将详细介绍KMP算法实现细节,绝对是最详细的细节介绍!!!1、KMP算法引入假设给你两个字符串strOne=“abababaa...原创 2020-03-15 23:27:29 · 2333 阅读 · 4 评论 -
LeetCode 验证IP地址
题目要求: 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数...原创 2019-03-31 09:24:24 · 2792 阅读 · 0 评论 -
LeetCode 复原IP地址(回溯法、穷举法)
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]思路分析:由于IP地址是32位二进制,分成四个段(每个段8位二进制),则每个段的取值范围位(0~255)。从字符串上来看,每个段的长度是1到3位。并且如果有一个段的长度大于1,则其第一位不能是“0”,形...原创 2019-02-17 16:47:01 · 965 阅读 · 0 评论 -
LeetCode 正则表达式的匹配
给定一个字符串 (s) 和一个字符模式 §。实现支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符。‘*’ 匹配零个或多个前面的元素。匹配应该覆盖整个字符串 (s) ,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1: 输入: s = "aa" p = "a" ...原创 2019-02-09 11:03:26 · 474 阅读 · 0 评论 -
LeetCode 最后一个单词的长度
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: "Hello World"输出: 5思路分析:这道题还是比较简单的,使用一个指针从右往左进行寻找即可。图解:class Solution {public: int lengthOfLast...原创 2019-02-13 16:46:34 · 235 阅读 · 0 评论 -
LeetCode 有效数字
验证给定的字符串是否为数字。例如:"0" => true" 0.1 " => true"abc" => false"1 a" => false"2e10" => true说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。思路分析:这题干给的不是一般的模糊,不要将什么策略,撸起袖子就是干!!原创 2019-02-14 11:03:46 · 402 阅读 · 0 评论 -
LeetCode 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"思路分析:对齐、相加、进位。class Solution {public: string addBinary(stri原创 2019-02-14 11:40:30 · 3561 阅读 · 2 评论 -
LeetCode 文本左右对齐
给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ’ ’ 填充,使得每行恰好有 maxWidth 个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。文本的...原创 2019-02-14 14:45:10 · 745 阅读 · 0 评论 -
LeetCode 简化路径
以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜...原创 2019-02-14 16:57:09 · 1088 阅读 · 0 评论 -
LeetCode 七进制数
给定一个整数,将其转化为7进制,并以字符串形式输出。示例 1:输入: 100输出: "202"示例 2:输入: -7输出: "-10"注意: 输入范围是 [-1e7, 1e7] 。思路分析: 这种题就不要说了吧,直接上代码。class Solution {public: string convertToBase7(int num) { string ...原创 2019-04-06 10:46:22 · 757 阅读 · 0 评论 -
LeetCode 最长回文子序列(动态规划)
给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。示例 1:输入:"bbbab"输出:4一个可能的最长回文子序列为 "bbbb"。示例 2:输入:"cbbd"输出:2一个可能的最长回文子序列为 "bb"。思路分析: 这种最长子序列问题,一般都是使用动态规划来进行处理。dp[i][j]代表的是字符段[i, j]最长回文子序列动态转移方程:...原创 2019-04-07 09:48:49 · 618 阅读 · 0 评论 -
LeetCode 检测大写字母
给定一个单词,你需要判断单词的大写使用是否正确。我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如"USA"。单词中所有字母都不是大写,比如"leetcode"。如果单词不只含有一个字母,只有首字母大写, 比如 "Google"。否则,我们定义这个单词没有正确使用大写字母。示例 1:输入: "USA"输出: True示例 2:输入: "FlaG"输出:...原创 2019-04-07 14:33:36 · 353 阅读 · 0 评论 -
LeetCode 最长特殊序列I
给定两个字符串,你需要从这两个字符串中找出最长的特殊序列。最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。子序列可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。输入为两个字符串,输出最长特殊序列的长度。如果不存在,则返回 -1。示例 :输入: "aba", "cdc"输出: 3...原创 2019-04-07 19:02:55 · 291 阅读 · 0 评论 -
LeetCode 最长特殊序列II
给定字符串列表,你需要从它们中找出最长的特殊序列。最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。子序列可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。输入将是一个字符串列表,输出是最长特殊序列的长度。如果最长特殊序列不存在,返回 -1 。示例:输入: "aba", "cdc",...原创 2019-04-07 20:27:43 · 817 阅读 · 3 评论 -
LeetCode 学生出勤记录 I
给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符:'A' : Absent,缺勤'L' : Late,迟到'P' : Present,到场如果一个学生的出勤记录中不超过一个’A’(缺勤)并且不超过两个连续的’L’(迟到),那么这个学生会被奖赏。你需要根据这个学生的出勤记录判断他是否会被奖赏。示例 1:输入: "PPALLP"输出: True示例 2:输入:...原创 2019-04-11 19:09:29 · 276 阅读 · 0 评论 -
LeetCode 通过删除字母匹配到字典最长单词
给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = "abpcplea", d = ["ale","apple","monkey","plea"]输出: "apple"示例 2:输入:s = "abpcplea", d...原创 2019-04-08 15:00:15 · 296 阅读 · 0 评论 -
LeetCode 根据二叉树创建字符串(递归)
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释: 原本将是“1(2...原创 2019-04-15 17:30:56 · 660 阅读 · 0 评论 -
LeetCode 无重复字符的最长子串(双指针)
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke...原创 2019-04-09 09:02:38 · 552 阅读 · 0 评论 -
LeetCode 在系统中查找重复文件(hash表)
给定一个目录信息列表,包括目录路径,以及该目录中的所有包含内容的文件,您需要找到文件系统中的所有重复文件组的路径。一组重复的文件至少包括二个具有完全相同内容的文件。输入列表中的单个目录信息字符串的格式如下:“root/d1/d2/…/dm f1.txt(f1_content) f2.txt(f2_content) … fn.txt(fn_content)”这意味着有 n 个文件(f1.txt...原创 2019-04-15 18:54:53 · 895 阅读 · 0 评论 -
LeetCode 最优除法
给定一组正整数,相邻的整数之间将会进行浮点除法操作。例如, [2,3,4] -> 2 / 3 / 4 。但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,才能得到最大的结果,并且返回相应的字符串格式的表达式。你的表达式不应该含有冗余的括号。示例:输入: [1000,100,10,2]输出: "1000/(100/10/2)"解释:1000/(1...原创 2019-04-12 14:55:28 · 526 阅读 · 0 评论 -
LeetCode TinyURL 的加密与解密(hash表)
TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk.要求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被...原创 2019-04-09 11:58:36 · 990 阅读 · 0 评论 -
LeetCode 复数乘法
给定两个表示复数的字符串。返回表示它们乘积的字符串。注意,根据定义 i2 = -1 。示例 1:输入: "1+1i", "1+1i"输出: "0+2i"解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。示例 2:输入: "1+-1i", "1+-1i"输出: "0+-2i"解释: (1 - i) * (...原创 2019-04-09 14:18:47 · 703 阅读 · 0 评论 -
LeetCode 下一个更大元素III(图解)
给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。示例 1:输入: 12输出: 21示例 2:输入: 21输出: -1思路分析: 请先翻阅 LeetCode 下一个排列这道题看似和上一道没有什么关系,但是当我们把12转换为“12”,这道题不就是需要寻找[‘1’,‘2’]的下一个排列吗?!...原创 2019-04-12 16:09:06 · 950 阅读 · 0 评论 -
LeetCode 反转字符串中的单词III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc" 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。思路分析: 从头到尾扫描整个字符串,每次反转一个单词。class Solutio...原创 2019-04-12 16:36:04 · 301 阅读 · 0 评论 -
LeetCode 最小时间差(set辅助)
给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并已分钟数表示。示例 1:输入: ["23:59","00:00"]输出: 1备注:列表中时间数在 2~20000 之间。每个时间取值在 00:00~23:59 之间。思路分析: 直接处理“小时 : 分钟”比较复杂,我们将所有时间点转换为分钟数,并且按照分钟进行排序。然后找到相邻的两个最小的间距就是...原创 2019-04-09 15:24:23 · 606 阅读 · 0 评论 -
LeetCode 反转字符串II
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s = "abcdefg", k = 2输出: "bacdfeg"要求:该字符串只包含小写的英文字母。给定字符串的长度和 k 在[1, ...原创 2019-04-09 16:44:40 · 308 阅读 · 0 评论 -
LeetCode 寻找最近的回文数
给定一个整数 n ,你需要找到与它最近的回文数(不包括自身)。“最近的”定义为两个整数差的绝对值最小。示例 1:输入: "123"输出: "121"注意:n 是由字符串表示的正整数,其长度不超过18。如果有多个结果,返回最小的那个。思路分析:如果数组的字符串长度 == 1,数字n - 1开头为1,9**9为一个候选答案 例:100000,答案为99999开头...原创 2019-04-13 10:34:45 · 642 阅读 · 2 评论 -
LeetCode 函数的独占时间(辅助stack)
给出一个非抢占单线程CPU的 n 个函数运行日志,找到函数的独占时间。每个函数都有一个唯一的 Id,从 0 到 n-1,函数可能会递归调用或者被其他函数调用。日志是具有以下格式的字符串:function_id:start_or_end:timestamp。例如:“0:start:0” 表示函数 0 从 0 时刻开始运行。“0: end :0” 表示函数 0 在 0 时刻结束。函数的独占时间定...原创 2019-04-16 17:02:29 · 644 阅读 · 0 评论 -
LeetCode 实现一个魔法字典(前缀树)
实现一个带有buildDict, 以及 search方法的魔法字典。对于buildDict方法,你将被给定一串不重复的单词来构建一个字典。对于search方法,你将被给定一个单词,并且判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。示例 1:Input: buildDict(["hello", "leetcode"]), Output: NullIn...原创 2019-04-20 18:03:41 · 773 阅读 · 0 评论 -
LeetCode 键值映射(前缀树)
实现一个 MapSum 类里的两个方法,insert 和 sum。对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。示例 1:输入: insert("apple", 3), 输出: Null输入: sum("...原创 2019-04-20 18:51:17 · 1005 阅读 · 0 评论 -
LeetCode 字符串的排列(滑动窗口)
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例2:输入: s1= "ab" s2 = "eidboaoo"输出: False注意:输入的字符串只包含小...原创 2019-04-13 13:00:38 · 1154 阅读 · 0 评论 -
LeetCode 有效的括号字符串(辅助stack)
给定一个只包含三种字符的字符串:( ,) 和 * ,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为有效字符串。示例 1:输入: "()"输出: True...原创 2019-04-20 21:04:19 · 483 阅读 · 0 评论 -
LeetCode 验证回文字符串II
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。思路分析: 首先我们将初始输入的str看作为一个合法的回文串,使用left、right指针去验证,如果出现str[lef...原创 2019-04-21 10:29:45 · 294 阅读 · 0 评论 -
LeetCode 棒球比赛
你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在本轮中获得的积分数。2. “+”(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。3. “D”(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。4. “C”(一个操作,这不是一个回合的分数):表示您获得的最后一个有效 回合的分数是无效的,应该被移除...原创 2019-04-21 11:17:53 · 210 阅读 · 0 评论 -
LeetCode 两个字符串的删除操作(动态规划)
给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例 1:输入: "sea", "eat"输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"说明:给定单词的长度不超过500。给定单词中的字符只含有小写字母。思路分析: 这是典型的字符串操作最优题,一般动态规划...原创 2019-04-14 10:06:30 · 1705 阅读 · 0 评论 -
LeetCode 解码方法(动态规划)
一条包含字母 A-Z 的消息通过以下的方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26除了上述的条件以外,现在加密字符串可以包含字符 '‘了,字符’‘可以被当做1到9当中的任意一个数字。给定一条包含数字和字符’*'的加密信息,请确定解码方法的总数。同时,由于结果值可能会相当的大,所以你应当对109 + 7取模。(翻译者标注:此处取模主要是为了防止...原创 2019-04-17 10:48:33 · 982 阅读 · 1 评论 -
LeetCode 求解方程
求解一个给定的方程,将x以字符串"x=#value"的形式返回。该方程仅包含’+’,’ - '操作,变量 x 和其对应系数。如果方程没有解,请返回“No solution”。如果方程有无限解,则返回“Infinite solutions”。如果方程中只有一个解,要保证返回值 x 是一个整数。示例 1:输入: "x+5-3+x=6+x-2"输出: "x=2"示例 2:输入: "...原创 2019-04-17 11:28:04 · 2122 阅读 · 0 评论 -
LeetCode 标签验证器(辅助stack)
给定一个表示代码片段的字符串,你需要实现一个验证器来解析这段代码,并返回它是否合法。合法的代码片段需要遵守以下的所有规则:代码必须被合法的闭合标签包围。否则,代码是无效的。闭合标签(不一定合法)要严格符合格式:<TAG_NAME>TAG_CONTENT</TAG_NAME>。其中,<TAG_NAME>是起始标签,</TAG_NAME>是结束标签...原创 2019-04-14 17:22:47 · 557 阅读 · 0 评论 -
LeetCode 分数加减运算
给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果。 这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1。示例 1:输入:"-1/2+1/2"输出: "0/1" 示例 2:输入:"-1/2+1/2+1/3"输出: "1/3"示例 3:输入:"1/3...原创 2019-04-14 19:53:32 · 857 阅读 · 0 评论 -
LeetCode 回文子串(动态规划、中心扩展法)
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".示例 2:输入: "aaa"输出: 6说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".注意:输入的字...原创 2019-04-17 15:31:36 · 743 阅读 · 0 评论