字符串
练习
会飞的鸡翅膀
这个作者很懒,什么都没留下…
展开
-
10. 正则表达式匹配
题目描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa” p = “a”输出:false解释:“a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa” p = “a*”输出:true解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是原创 2020-10-29 13:42:30 · 53 阅读 · 0 评论 -
76. 最小覆盖子串
题目描述给你一个字符串 S、一个字符串 T 。请你设计一种算法,可以在 O(n) 的时间复杂度内,从字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入:S = “ADOBECODEBANC”, T = “ABC”输出:“BANC”提示:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-window-su原创 2020-10-27 16:42:27 · 67 阅读 · 0 评论 -
13. 罗马数字转整数
题目描述罗马数字包含以下七种字符: 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-10-25 22:01:59 · 53 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
题目描述请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是原创 2020-10-25 21:36:11 · 68 阅读 · 0 评论 -
12. 整数转罗马数字
题目描述罗马数字包含以下七种字符: 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-10-25 19:44:40 · 40 阅读 · 0 评论 -
767. 重构字符串
题目描述给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例 1:输入: S = “aab”输出: “aba”示例 2:输入: S = “aaab”输出: “”注意:S 只包含小写字母并且长度在[1, 500]区间内。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reorganize-string思路字符每重复一次+100;用1-26记录原创 2020-10-23 21:07:33 · 80 阅读 · 0 评论 -
227. 基本计算器 II
题目描述实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。示例 1:输入: “3+2*2”输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5说明:你可以假设所给定的表达式都是有效的。请不要使用内置的库函数 eval。来源:力扣(LeetCode)链接:https://leetcode-cn.com/proble原创 2020-10-23 19:21:05 · 71 阅读 · 0 评论 -
93. 复原IP地址
题目描述给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效的 IP 地址。示例 1:输入:s = “25525511135”输出:[“255.255.11.13原创 2020-10-21 19:36:45 · 62 阅读 · 0 评论 -
609. 在系统中查找重复文件
题目描述给定一个目录信息列表,包括目录路径,以及该目录中的所有包含内容的文件,您需要找到文件系统中的所有重复文件组的路径。一组重复的文件至少包括二个具有完全相同内容的文件。输入列表中的单个目录信息字符串的格式如下:“root/d1/d2/…/dm f1.txt(f1_content) f2.txt(f2_content) … fn.txt(fn_content)”这意味着有 n 个文件(f1.txt, f2.txt … fn.txt 的内容分别是 f1_content, f2_content …原创 2020-10-20 19:39:37 · 179 阅读 · 0 评论 -
6. Z 字形变换
题目描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:示例 2:来源:力扣(LeetCode)链接:https://leetcode-cn.co原创 2020-10-20 16:37:48 · 151 阅读 · 0 评论 -
91. 解码方法
题目描述一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。题目数据保证答案肯定是一个 32 位的整数。示例 1:输入:“12”输出:2解释:它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入:“226”输出:3解释:它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。示例原创 2020-10-20 11:27:19 · 210 阅读 · 0 评论 -
67. 二进制求和
题目描述给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”提示:每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。1 <= a.length, b.length <= 10^4字符串如果不是 “0” ,就都不含前导零。思路class Solution {原创 2020-10-19 22:11:41 · 65 阅读 · 0 评论 -
680. 验证回文字符串 Ⅱ
题目描述给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: “aba”输出: True示例 2:输入: “abca”输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。思路当low处的字符不等于high处的字符时,只要以下两种情况实现一种就可成立:low+1~high的字符串是回文字符串;low~high-1的字符串是回文字符串。class Solution {原创 2020-10-19 21:41:55 · 152 阅读 · 0 评论 -
17. 电话号码的字母组合
题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。思路class Solution { private List<String> res = new ArrayLis原创 2020-10-19 21:09:03 · 45 阅读 · 0 评论 -
415. 字符串相加
题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式思路class Solution { public String addStrings(String num1, String num2) { StringBuilder r原创 2020-10-18 21:44:50 · 81 阅读 · 0 评论 -
49. 字母异位词分组
题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:说明:所有输入均为小写字母。不考虑答案输出的顺序。思路排序,用mapclass Solution { public List<List<String>> groupAnagrams(String[] strs) { HashMap<String,List> res = new HashMap<>();原创 2020-10-18 20:55:41 · 39 阅读 · 0 评论 -
68. 文本左右对齐
题目描述给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ’ ’ 填充,使得每行恰好有 maxWidth 个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。文本的最后一行应为左对齐,且单词之间不插入额外的空格。说明:单词是指由非空格字符组成的字符序列。每个原创 2020-10-18 14:46:35 · 251 阅读 · 2 评论 -
1249. 移除无效的括号
题目描述给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。有效「括号字符串」应当符合以下 任意一条 要求:空字符串或只包含小写字母的字符串可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」示例 1:输入:s = “lee(t©o)de)”输出:原创 2020-10-16 21:29:03 · 83 阅读 · 0 评论 -
22. 括号生成
题目描述数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]思路class Solution { ArrayList<String> res = new ArrayList<>(); public List<String> generateParenthesis(i原创 2020-10-16 20:39:58 · 127 阅读 · 0 评论 -
273. 整数转换英文表示
题目描述将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 - 1 。示例 1:输入: 123输出: “One Hundred Twenty Three”示例 2:输入: 12345输出: “Twelve Thousand Three Hundred Forty Five”示例 3:输入: 1234567输出: “One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven”示例 4:原创 2020-10-15 21:19:58 · 314 阅读 · 0 评论 -
3. 无重复字符的最长子串
题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串原创 2020-10-15 17:06:14 · 107 阅读 · 0 评论 -
937. 重新排列日志文件
题目描述你有一个日志数组 logs。每条日志都是以空格分隔的字串。对于每条日志,其第一个字为字母与数字混合的 标识符 ,除标识符之外的所有字为这一条日志的 内容 。除标识符之外,所有字均由小写字母组成的,称为 字母日志除标识符之外,所有字均由数字组成的,称为 数字日志题目所用数据保证每个日志在其标识符后面至少有一个字。请按下述规则将日志重新排序:所有 字母日志 都排在 数字日志 之前。字母日志在内容不同时,忽略标识符后,按内容字母顺序排序;在内容相同时,按标识符排序;原创 2020-10-15 16:22:26 · 60 阅读 · 0 评论 -
20. 有效的括号
题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true原创 2020-10-14 21:23:21 · 59 阅读 · 0 评论 -
5. 最长回文子串
题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路class Solution { public String longestPalindrome(String s) { int n = s.length(); boolean dp[][] = new b原创 2020-10-14 18:37:25 · 44 阅读 · 0 评论