LeetCode---String
想飞的盗版鱼
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode(String)--383. 赎金信
leetcode(String)–383. 赎金信 1,题目: 2,思路: 方法一:排序与双指针: 1.题目要求magazine中的字母是否可以构成ransomNote,且magazine中的字母不能重复使用。那么对于ransomNote中的每一个字符,都去magazine中查找是否存在(找到一个后,要从magazine中剔除)。 2.用暴力查找太慢。借鉴判断字符串相等的思路,双指针分别指向两个字符串的第一个字符,依次对比,双指针一起移动。我们可以将magazine与ransomNote对应的字符数组m原创 2020-06-21 09:42:33 · 229 阅读 · 0 评论 -
leetcode(String)--344. 反转字符串
leetcode(String)–344. 反转字符串 1,题目: 2,思路: 方法一:双指针(简单方法)(自己写的): 就是i和j分别指向数组的开始和末尾,当i<j的时候,就交换即可。 方法二:主要是运用了 char temp = s[i]; s[i] = s[length - i]; s[length - i] = temp; 也就是s[i] = s[length - i];交换。 其实实质还是双指针。 3,代码: 方法一:双指针(简单方法)(自己写的): class Solution {原创 2020-06-19 09:28:34 · 206 阅读 · 0 评论 -
leetcode(String)--893. 特殊等价字符串组
leetcode(String)–893. 特殊等价字符串组 1,题目: 2,思路: 因为所有 A[i] 都具有相同的长度,所以没有必要考虑长度问题了。 奇数位和偶数位上的所有字符分别一致,就是一组,如abcde、cdabe,两者奇数位上均是a/c/e,偶数位上都是b/d,最后都能通过有限次的交换得到对方 所以,搜集每个字符串中奇数位和偶数位的字符,按字典序排好序后使用Set来筛选,如abcde的奇数位为ace,偶数位为bd,拼接出来加入Set,即acebd;acbde的奇数位为abe,偶数位为cd,原创 2020-06-18 21:08:21 · 217 阅读 · 0 评论 -
leetcode(String)--443. 压缩字符串
leetcode(String)–443. 压缩字符串 1,题目: 2,思路: 方法一:滑动窗口: 利用滑动窗口法,左右指针起点都为原数组的首位。 实现步骤如下: 1.不断右移右指针,使窗口不断增大; 2.当窗口内出现一个不同的元素时,就可以将元素及其数量(等于左右指针之差)更新在数组中,然后让左指针指向右指针; 3.遍历到最后一个字符时也需要结算,因此将右指针的终点设为数组之外一格。当右指针移到终点时也要更新数组。 方法二:双指针: 遍历字符串 取相同字符序列的首字符存下 记录相同字符序原创 2020-06-18 17:33:15 · 208 阅读 · 0 评论 -
leetcode(String)--434. 字符串中的单词数
leetcode(String)–434. 字符串中的单词数 1,题目: 2,思路: 方法一:双指针: 用i指向一个单词的开始,再用j来寻找这个单词的末尾,遮掩的话,就找到了一个单词。以此循环。 方法二:原地法: if ((i == 0 || s.charAt(i-1) == ’ ') && s.charAt(i) != ’ ') {//通过判断i这个位置的,当前的字符和前一个是否为空格,来判断是否是一个单词。 方法三:字符串按空格分割成字符串数组: 将字符串按空格分割成字符串数组,判断每原创 2020-06-18 10:15:06 · 174 阅读 · 0 评论 -
leetcode(String)--917. 仅仅反转字母
leetcode(String)–917. 仅仅反转字母 1,题目: 2,思路: 方法一:双指针: 这个是普通的方法,就是用双指针来进行转换。 方法二:用到了StringBuilder: 这里用到了StringBuilder,但是里面的实质还是用了双指针的实质。 方法三:反转指针: (1)一个接一个输出 s 的所有字符。当遇到一个字母时,我们希望找到逆序遍历字符串的下一个字母。 (2)所以我们这么做:维护一个指针 j 从后往前遍历字符串,当需要字母时就使用它。 3,代码: 方法一:双指针: class S原创 2020-06-18 09:52:43 · 237 阅读 · 0 评论 -
leetcode(String)--415. 字符串相加
leetcode(String)–415. 字符串相加 1,题目: 2,思路: 方法一:双指针: 算法流程: 设定 i,j 两指针分别指向 num1,num2 尾部,模拟人工加法; 1.计算进位: 计算 carry = tmp // 10,代表当前位相加是否产生进位; 2.添加当前位: 计算 tmp = n1 + n2 + carry,并将当前位 tmp % 10 添加至 res 头部; 3.索引溢出处理: 当指针 i或j 走过数字首部后,给 n1,n2 赋值为 0,相当于给 num1,num2 中长度原创 2020-06-17 21:35:15 · 411 阅读 · 0 评论 -
leetcode(String)--709. 转换成小写字母
leetcode(String)–709. 转换成小写字母 1,题目: 2,思路: 方法一:字符相减: 先转换成字符数组 接着循环这个字符数组,如果是大写就转换成小写。 方法二:用到了ASC||码: ASC||码>65,<90就是大写字母,需要进行+32,转换成小写 方法三:这个就直接用到了函数了。其实这个方法有违背题意了: 直接用到了toLowerCase这个自带的函数。 3,代码: 方法一:字符相减: class Solution { public String toLowerCas原创 2020-06-17 20:57:38 · 208 阅读 · 0 评论 -
leetcode(string)--58.最后一个单词的长度
leetcode(string)–58.最后一个单词的长度 1,题目: 2,思路: 方法一:从右向左遍历: 从右向左遍历,从第一个不是空格的字符开始计数,一旦开始计数,再遇到空格就结束了。 方法二:寻找最后一个单词的首部和尾部: 先从后过滤掉空格找到单词尾部,再从尾部向前遍历,找到单词头部,最后两者相减,即为单词的长度 方法三:用到了自带的函数lastIndexOf: 分析可知,给定的限制是一个字符串,会存在首尾有空格的情况,所以先trim()去除首尾空格。 最后一个字符串的长度,其实就是字符串去除首尾空原创 2020-06-17 11:22:31 · 200 阅读 · 0 评论 -
leetcode(String)--557.反转字符串中的单词 III
leetcode(String)–557.反转字符串中的单词 III 1,题目: 2,思路: 方法一:简单方法(用了自带的函数): 我们将输入字符串中按照空白字符串分开,然后把所有单词放到一个字符串列表中,然后我们逐一遍历每一个字符串并把反转结果连接起来。最后,我们将删除了额外空白字符的字符串返回。 方法二:使用 StringBuilder 和 reverse 方法 : 这一方法中,我们不使用 split 方法,我们创建临时字符串 word 保存单词,我们在遍历过程中将字符逐一连接在 word 后面,直到原创 2020-06-17 10:42:29 · 210 阅读 · 0 评论 -
leetcode(String)--522 最长特殊序列 II
leetcode(String)–522 最长特殊序列 II 1,题目: 2,思路: 方法一: 先按照字符串的长度降序排序,先从最长的字符串开始找 只和长度不小于它的字符串进行比较(这样才可能是子序列) 方法二: 去重+判断是否为子序列 3,代码: 方法一: class Solution { public int findLUSlength(String[] strs) { //先按照字符串的长度降序排序,先从最长的字符串开始找 //只和长度不小于它的字原创 2020-05-22 21:27:33 · 312 阅读 · 0 评论 -
leetcode(String)--521 最长特殊序列 Ⅰ
leetcode(String)–521 最长特殊序列 Ⅰ 1,题目: 2,思路: 字符串 aa 和 bb 共有 3 种情况: 1,a=b。如果两个字符串相同,则没有特殊子序列,返回 -1。 2,length(a)==length(b) 且 a !=b。例如:abcabc 和abdabd。这种情况下,一个字符串一定不会是另外一个字符串的子序列,因此可以将任意一个字符串看作是特殊子序列,返回 length(a)或 length(b)。 3,length(a) !=length(b)。例如:abc原创 2020-05-19 11:59:37 · 224 阅读 · 0 评论 -
leetcode(String)--520 检测大写字母
leetcode(String)–520 检测大写字母 1,题目: 2,思路: 方法一: 声明cnt记录大写字母的个数; 声明index记录大写字母的位置索引; 当cnt 等于 word.length,即所有字母都大写,返回true; 或者,当cnt 等于1,且index == 0,即只有首个字母是大写时,返回true; 或者,当cnt==0,即所有字母均小写时,返回true; 当cnt>1且cnt<word.length时,返回false; 当cnt==1,但index!=0,即有一个大写原创 2020-05-18 21:54:33 · 210 阅读 · 0 评论
分享