Find Repeated DNA Sequences
题目描述:
定义长度为10的DNA片段,找到给定字符串中所有出现超过1次的DNA字符串片段。
例子:
具体描述可以看LeetCode187
解题思路:
我们用一个哈希表保存该字符串是否出现,用一个哈希表来表示是否已经保存到结果中即可。
代码如下:
|
|
定义长度为10的DNA片段,找到给定字符串中所有出现超过1次的DNA字符串片段。
具体描述可以看LeetCode187
我们用一个哈希表保存该字符串是否出现,用一个哈希表来表示是否已经保存到结果中即可。
|
|
以字符串形式给定一个计算机中的路径,利用计算机中路径的知识将其简化。其中主要的规则有:
..表示进行上层目录
.表示当前目录
主要的难点在于我们如何将字符串按照特定字符隔开。这边使用的是stringstream来将字符串分隔。其中需要对..和.这两种情况进行讨论。只有当保存路径的vector非空并且分隔的字符串不是..的情况我们才将分隔的字符串保存到vector。然后我们将vector中字符串用’/‘连接即可。最后需要注意的是我们如果得到的vector是空的情况下,直接返回’/‘即可。
|
|
给定一个字符串,找到字符串中最后一个单词的长度。
具体描述见LeetCode58
本题主要的难点在于各种边界条件的判断。首先是字符串是空的情况;其次字符串结尾是空格的情况;找到非空格字符后我们需要判断是不是已经到达字符的首位;最后是找到结尾单词的起始位置。
|
|
给定一组字符串序列,将含有相同字符的字符串进行分组。我们以”eat”和”ate”是同一组字符串
我们通过对vector中字符串进行构建哈希表,利用该哈希表作为key,字符串作为value来进行查找和匹配;而后对最终哈希表中的所有value进行保存即为分组的结果。
|
|
给定一个数字n,找到按照如下规律的第n个字符串。
1: 11 即1个1
2: 21 即2个1
3: 1211 即1个2两个1
4: 111221 即1个1,1个2,2个1
具体描述看LeetCode38
通过观察规律我们知道,我们需要定义一个函数,输入为上一轮的结果,输出为当前轮的结果。然后将当前轮的结果作为下一轮的输入不断循环即可。
|
|
给定一个源字符串和目标字符串,找到源字符串中第一次出现目标字符串出现的位置。
具体描述见LeetCode28
主要的想法在于我们在遍历字符串的过程中如何判断当前位置是否出现目标字符串。这边用的是substr函数将字符串中的和目标字符串相同长度的子串剪切用于判断是否相同即可。另外需要注意的是边界条件的判断。空串以及字符串长度的判断。
|
|
给定两个有序链表的头节点,要求返回将这两个链表合并后的头结点。
具体描述看LeetCode21
|
|
给定链表的头节点,然后要求根据链表节点所处的位置的奇偶性重新排列链表。
具体描述可以看LeetCode328
本题的解题思路是将原始链表中的奇数位置节点连接成奇数链表,偶数位置连接成偶数链表;然后重新连接这两个链表即可。主要需要注意的是:在遍历next节点的时候,我们需要判断链表的下一个节点是否为空。
|
|
给定一个链表的头结点,然后指定起始位置m和终止位置n;要求逆序链表中从第m个节点到n个节点的部分。
详细描述可以看LeetCode92。
链表的题目需要注意的是关于头节点的处理。我们定义了一个虚拟头节点用来处理这种情况;另外需要注意的是关于链表被逆序后的重新连接的问题,我们在开始部分需要找到需要逆序部分的上一个节点和下一个节点用来将逆序结果重新连接到链表中。
|
|
给定一个链表的头节点,然后将原来链表顺序为L1->L2->L3…..->Ln-1->Ln的链表重现排序为L1->Ln->L2->Ln-1….
具体描述可以看LeetCode143
本题的思路很简单,主要是过程中涉及到链表的多种操作需要认真学习。首先是我们找到链表的中间节点主要利用的是快慢指针的方式,这个过程中需要注意在while部分我们需要考虑fast和fast->next;然后找到后半段链表后,将其逆序;这个过程中主要是定义pre=NULL的方式能帮助代码简洁一些;最后是两个链表的重新连接;主要是保存当前指针的下一个节点用于遍历即可。
|
|