字符串
新名字的故事
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1449. 数位成本和为目标值的最大数字
题目描述:给你一个整数数组 cost 和一个整数 target 。请你返回满足如下规则可以得到的 最大整数:给当前结果添加一个数位(i + 1)的成本为 cost[i] (cost 数组下标从 0 开始)。总成本必须恰好等于 target 。添加的数位中没有数字 0 。由于答案可能会很大,请你以字符串形式返回。如果按照上述要求无法得到任何整数,请你返回 “0” 。解题思路:动态规划+完全背包class Solution: def largestNumber(self, cost: Li原创 2020-12-01 16:49:54 · 280 阅读 · 0 评论 -
68. 文本左右对齐
题目描述:给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ’ ’ 填充,使得每行恰好有 maxWidth 个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。文本的最后一行应为左对齐,且单词之间不插入额外的空格。说明:单词是指由非空格字符组成的字符序列。每个单原创 2020-11-30 16:52:51 · 172 阅读 · 0 评论 -
面试题 17.13. 恢复空格
题目描述:哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!“已经变成了"iresetthecomputeritstilldidntboot”。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。注意:本题相对原题稍作改动原创 2020-11-30 14:33:38 · 151 阅读 · 0 评论 -
1614. 括号的最大嵌套深度
题目描述:如果字符串满足一下条件之一,则可以称之为 有效括号字符串(valid parentheses string,可以简写为 VPS):字符串是一个空字符串 “”,或者是一个不为 “(” 或 “)” 的单字符。字符串可以写为 AB(A 与 B 字符串连接),其中 A 和 B 都是 有效括号字符串 。字符串可以写为 (A),其中 A 是一个 有效括号字符串 。类似地,可以定义任何有效括号字符串 S 的 嵌套深度 depth(S):depth("") = 0depth© = 0,其中 C 是单个原创 2020-11-30 10:56:30 · 342 阅读 · 1 评论 -
917. 仅仅反转字母
题目描述:给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。解题思路:用两个指针一个指向头,一个指向尾,如果遇到字母就交换,如果不是字母就直接跳过即可,代码如下:class Solution: def reverseOnlyLetters(self, S: str) -> str: size = len(S) res = [''] * size i, j = 0, size-1原创 2020-11-30 10:46:50 · 90 阅读 · 0 评论 -
816. 模糊坐标
题目描述:我们有一些二维坐标,如 “(1, 3)” 或 “(2, 0.5)”,然后我们移除所有逗号,小数点和空格,得到一个字符串S。返回所有可能的原始字符串到一个列表中。原始的坐标表示法不会存在多余的零,所以不会出现类似于"00", “0.0”, “0.00”, “1.0”, “001”, "00.01"或一些其他更小的数来表示坐标。此外,一个小数点前至少存在一个数,所以也不会出现“.1”形式的数字。最后返回的列表可以是任意顺序的。而且注意返回的两个数字中间(逗号之后)都有一个空格。解题思路:将字符串原创 2020-11-30 10:15:34 · 228 阅读 · 0 评论 -
859. 亲密字符串
题目描述:给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。交换字母的定义是取两个下标 i 和 j (下标从 0 开始),只要 i!=j 就交换 A[i] 和 A[j] 处的字符。例如,在 “abcd” 中交换下标 0 和下标 2 的元素可以生成 “cbad” 。解题思路:这道题容易出错的点,他要求交换这件事必须发生而且发生一次,因此返回True就只有两种情况,一是A==B而且A中有重复的字符,第二种情原创 2020-11-29 16:51:31 · 147 阅读 · 0 评论 -
1249. 移除无效的括号
题目描述:给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。有效「括号字符串」应当符合以下 任意一条 要求:空字符串或只包含小写字母的字符串可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」解题思路:用栈依次压入字符串中的字符,如果遇到),就弹出栈中字符直原创 2020-11-29 13:29:46 · 229 阅读 · 0 评论 -
2020-11-28
题目描述:给你一个回文字符串 palindrome ,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的字典序最小,且 不是 回文串。请你返回结果字符串。如果无法做到,则返回一个空串。解题思路:只有长度为1时没办法破坏其他情况都从高位到低位都尽可能将字符替换为a,不行的话直接将最后一个字符替换为b,长度为奇数时不考虑替换最中间那个字符,因为替换了也没用还是回文串,代码如下:class Solution: def breakPalindrome(self, palindrome: st原创 2020-11-28 15:04:46 · 119 阅读 · 0 评论 -
2020-11-28
题目描述:如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串。花括号展开的表达式可以看作一个由 花括号、逗号 和 小写英文字母 组成的字符串,定义下面几条语法规则:如果只给出单一的元素 x,那么表达式表示的字符串就只有 “x”。R(x) = {x}例如,表达式 {“a”} 表示字符串 “a”。而表达式 {“w”} 就表示字符串 “w”。当两个或多个表达式并列,以逗号分隔时,我们取这些表达式中元素的并集。R({e_1,e_2,…}) = R(e_1) ∪ R(e_2)原创 2020-11-28 14:51:37 · 120 阅读 · 0 评论 -
468. 验证IP地址
题目描述:编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。如果是有效的 IPv4 地址,返回 “IPv4” ;如果是有效的 IPv6 地址,返回 “IPv6” ;如果不是上述类型的 IP 地址,返回 “Neither” 。IPv4 地址由十进制数和点来表示,每个地址包含 4 个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。IPv6 地址由 8 组原创 2020-11-28 11:54:09 · 165 阅读 · 0 评论 -
面试题 01.06. 字符串压缩
题目描述:字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。解题思路:依次统计相同字符出现的次数即可class Solution: def sortString(self, s: str) -> str: alpha_map = [0] * 26 for c in s:原创 2020-11-28 11:25:09 · 1095 阅读 · 0 评论 -
1370. 上升下降字符串
题目描述:给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符。从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。重复步骤 5 ,直到你没法从 s 中选择字符。重复步骤 1 到 6 ,直到 s 中所有字原创 2020-11-27 21:03:41 · 92 阅读 · 0 评论 -
1585. 检查字符串是否可以通过排序子字符串得到另一个字符串
题目描述:给你两个字符串 s 和 t ,请你通过若干次以下操作将字符串 s 转化成字符串 t :选择 s 中一个 非空 子字符串并将它包含的字符就地升序排序。比方说,对下划线所示的子字符串进行操作可以由 “14234” 得到 “12344” 。如果可以将字符串 s 变成 t ,返回 true 。否则,返回 false 。一个 子字符串 定义为一个字符串中连续的若干字符。解题思路:原地升序排序的操作,全都可以转化为多次两个相邻字符的交换操作(满足交换条件,即右边的小于左边即可交换,冒泡排序的过程),那么只需原创 2020-11-27 20:34:28 · 208 阅读 · 0 评论 -
459. 重复的子字符串
题目描述:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。解题思路一:循环遍历可以重复的长度,依次比较每个重复长度中对应的字符是否相等,只要可以成功匹配并遍历完整个数组,即返回True,否则返回False,代码如下:class Solution: def repeatedSubstringPattern(self, s: str) -> bool: size = len(s) if s原创 2020-11-26 14:44:44 · 192 阅读 · 0 评论 -
1576. 替换所有的问号
题目描述:给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。注意:你 不能 修改非 ‘?’ 字符。题目测试用例保证 除 ‘?’ 字符 之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。解题思路:一次遍历每个字符,遇到问号的时候就修改当前字符,用一个不和前面也不和后面相同的字符替换当前字符即可,首尾字符的原创 2020-11-25 13:51:51 · 201 阅读 · 0 评论 -
面试题 16.26. 计算器
题目描述:给定一个包含正整数、加(+)、减(-)、乘()、除(/)的算数表达式(括号除外),计算其结果。表达式仅包含非负整数,+, - ,,/ 四种运算符和空格 。 整数除法仅保留整数部分。解题思路:首先去掉字符串的空格,然后依次读取每个整数num,然后看当前这个数前面是否有操作符,如果遇到+:num=num,如果遇到*:num *= q.pop(),如果遇到/:int(q.pop() / num),如果遇到-:num = -num,然后将num推入到栈中,最后将栈中所有元素求和得到最终结果,代码如下:原创 2020-11-25 13:19:26 · 169 阅读 · 0 评论
分享