
类型总结之——字符串
字符串
Mona______
好好学习天天向上 o(≧v≦)o
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
字符串总结点睛
1、数组填充问题 很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。 利用双指针,从后往前进行填充 这么做有两个好处: * 不用申请新数组。 * 从后向前填充元素,避免了从前先后填充元素要来的 每次添加元素都要将添加元素之后的所有元素向后移动 2、字符串和数组的差别 字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。 在C语言中,把一个字符串存入一个数组时,也把结束符 '\0'存入数原创 2021-04-25 13:22:15 · 144 阅读 · 0 评论 -
leetcode——第3题——最长不含重复字符
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 /* 子字符串:表示得是连续的 考察点: 1、哈希表 unordered_set 2、双指针 3、也可以用滑动窗口,滑动窗口其实就是一种双指针。 */ class Solution { public: int lengthOfLongestSubstring(string s) { // 因为要不重复,所以首先想到用哈希表,因为字符较多,所以数组不想,又因为不需要与下标关联,所以使用哈希集合足够,原创 2021-06-10 20:11:34 · 97 阅读 · 0 评论 -
leetcode——第249题——移位字符串分组
题目: 给定一个字符串,对该字符串可以进行 “移位” 的操作,也就是将字符串中每个字母都变为其在字母表中后续的字母,比如:“abc” -> “bcd”。这样,我们可以持续进行 “移位” 操作,从而生成如下移位序列: “abc” -> “bcd” -> … -> “xyz” 给定一个包含仅小写字母字符串的列表,将该列表中所有满足 “移位” 操作规律的组合进行分组并返回。 示例: 输入:[“abc”, “bcd”, “acef”, “xyz”, “az”, “ba”, “a”, “z”]原创 2021-06-10 14:21:35 · 498 阅读 · 0 评论 -
leetcode——第49题——字母异位词分组
题目: 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 示例: 输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [ [“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”] ] 说明: 所有输入均为小写字母。 不考虑答案输出的顺序。 /* 本题感觉在联系 哈希映射的嵌套关系 对内层的处理还是很不容易想到的,使用到了 emplace_back() */ class Solution {原创 2021-06-10 14:20:17 · 172 阅读 · 0 评论 -
leetcode——第1002题——查找常用字符
题目: 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。 你可以按任意顺序返回答案。 /* 1、刚开始懵在了 输入字符串 string 注意这里的输入形式是 vector<string> ,而不是 string 因此 每个逗号隔开的都是一个字符串咯 2、有点机智的处理 把比较多个字符串的最小频率,转换成比较第一个和其他 然后再其他的处理上原创 2021-06-09 20:50:42 · 164 阅读 · 0 评论 -
leetcode——第205题——同构字符串
题目: 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。 class Solution { public: // // 解法一:使用 count 来实现的 // bool isIsomorphic(string s, string t) // {原创 2021-06-08 20:17:26 · 297 阅读 · 1 评论 -
leetcode——第290题——单词规律
题目: 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。 class Solution { /* 感觉不是很会哎~~需要再多刷一下这个题 刚开始我还想判断这个,艾玛呀,这两个字符创的长度肯定不同的嘛!!! 字符串的大小就是包含的字符的个数,s 肯定是比 pattern 大的呀 ~~~ // if(pattern.size() != s.si原创 2021-06-08 19:56:33 · 215 阅读 · 2 评论 -
剑指offer——第48题——最长不含重复字符
题目: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 本题与主站 第3题 相同 class Solution { /* 子字符串:表示得是连续的 考察点: 1、哈希表 unordered_set 2、双指针 / 动态规划 3、也可以用滑动窗口,滑动窗口其实就是一种双指针。 如果不用上面的方法,那就是纯暴力解法,纯暴力的话,需要用双层的 for 循环 */ public: int lengthOfLongestSubstring(string s) {原创 2021-05-27 00:09:28 · 142 阅读 · 0 评论 -
leetcode——第459题——KMP的妙用之重复子串
题目: 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。 class Solution { public: void getNext(int* next,const string& s) { int j = -1; // 第一次自己写的时候忘了给第一个元素初始化了 next[0] = j; for(int i = 1; i < s.size(原创 2021-04-25 18:32:58 · 72 阅读 · 0 评论 -
leetcode——第28题——KMP yyds 太值得多啃啃了!
题目: 实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。 说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。 class Solution { public原创 2021-04-25 13:24:18 · 130 阅读 · 0 评论 -
leetcode剑指offer——第58-2题——左旋字符串
题目: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab" class Solution { public: void reverse(string& s, int start , int end) { for(int i=start,j=end;i<j;i++,j--) {原创 2021-04-24 23:37:15 · 82 阅读 · 0 评论 -
leetcode——第151题——这题真的要难哭我了啊!!!——去除冗余空格的尾部空格想了好久
题目: 给定一个字符串,逐个翻转字符串中的每个单词。 说明: 无空格字符构成一个 单词 。 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 class Solution { public: // 1、移除冗余空格 void removeExtraSpaces(string& s) { int slow = 0, fast = 0; // 1.1 去掉前面的原创 2021-04-24 23:19:59 · 355 阅读 · 0 评论 -
leetcode剑指offer——第5题——双指针替换空格
题目: 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 class Solution { public: string replaceSpace(string s) { int preSize = s.size(); int count = 0; for(int i = 0 ; i < preSize ; i++) { if(s[i]==' ') {原创 2021-04-24 21:05:51 · 137 阅读 · 0 评论 -
leetcode——第541题——反转字符V2.0
题目: 给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。 如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。 这道题第一遍自己做的时候,把判断那块搞得乱七八糟,要分好几种情况分别处理,看了carl大神的做法,其实只需三步走就能把所有情况涵盖进去。非常巧妙,需要多加思考 class Solution { public: // 因为不同的条件下都需要做反转,但最原创 2021-04-24 11:22:18 · 157 阅读 · 0 评论 -
leetcode——第344题——反转字符串简单
题目: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 这道题主要学一下 for 循环双变量的时候怎么写的叭,思路什么的都比较简单 class Solution { public: void reverseString(vector<char>& s) {原创 2021-04-24 11:27:28 · 203 阅读 · 0 评论