LeetCode 02. 两数相加(链表) 03.最大不重复的字符串
2018-03-04 14:51
477 查看
02题目如上图所示,其输入为一个两个链表,输出结果为两个链表。该题大体的意思为将链表中相对应的元素进行对应相加,然后将新的元素输入到结果链表中,但需要注意的问题是再当两个输入链表相加结果出现进位的时候,需要将进位加至下一级链表之中。题目答案如下:
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode pHead(0), *p=&pHead; int n=0; while(l1||l2||n) { int sum=l1->val + l2->val+n; n=sum/10; p->next=new ListNode(sum%10); p=p->next; l1 = l1->next; l2 = l2->next ; } return pHead.next; } };
程序新建一个链表,并建立一个flag n作为判断是否答案大于10的标志,若大于10,则n为1,否则为0。链表中元素的值即为
sum=l1->val + l2->val+n;
相对而言该题难度不大,只需要对链表有一定掌握,就可以很方便的解决该问题。
03 最大不重复字符串
解题思路:因为题目要求只需要返回最长的字符串长度,所以新建一个字符串,每次增加时将元素插入字符串中,并记录其尺寸大小,当发现重复元素的时候将字符串清零,并从比较当前尺寸长度和最大的尺寸长度的大小,留下最大长度的字符串大小,若题目要求需要返回最大字符串时,也可以通过pair进行存储两个元素,来大到解题的目的。 代码如下:
class Solution { public: int lengthOfLongestSubstring(string s) { unordered_set<char> table; int tepCount=0; int MaxCount=0; for(int i=0;i<s.length();i++){ auto iter=table.find(s[i]); if(iter==table.end()) tepCount++; else{ table.clear(); tepCount=1; int j=i-1; while(s[j]!=s[i]){ table.emplace(s[j]); j--; tepCount++; } } table.emplace(s[i]); if(tepCount>MaxCount) MaxCount=tepCount; } return MaxCount; } };当然在解题后,也发现了一种网友共享的相当简洁,并且非常有意思的解法。解法如下:
class Solution { public: int lengthOfLongestSubstring(string s) { vector<int> flag(256,-1); int start=-1; int MaxCount=0; for(int i=0;i<s.length();i++){ if(flag[s[i]]>start) start=flag[s[i]]; flag[s[i]]=i; MaxCount=max(MaxCount,i-start); } return MaxCount; } };因为只需要返回其最大长度,所以实际上并不需要对字符串进行任何处理,单纯通过数字即可解决该问题。通过一个容器,定义其初始为-1,很类似于哈希的一种解法,将字母分别位置分别存在不同的为之中,然后当再次发现该数的时候,将第二次时的位置和初始位置相减,就可以得到最大的长度。相对于一般解法,该事件复杂度为O(n)且十分巧妙。这种解题思路,确实很值得学习。
相关文章推荐
- leetcode——Longest Substring Without Repeating Characters 求链表中无重复字符的最大字串长度(AC)
- leetcode-java.T003_LongestSubstringWithoutRepeatingCharacters 给定一个字符串,找字符中的最大非重复子串
- Leetcode002--单链表两数相加
- LeetCode系列字符串操作(一)ZigZag输出,寻找最大不重复字串长度。
- 链表:链表两数相加( LeetCode 2. Add Two Numbers(两数相加))
- Leetcode 第二题,两数链表相加
- 02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序
- leetcode--3--最长不重复字符串
- LeetCode | Remove Duplicates from Sorted List II(删除链表中重复结点2)
- LeetCode-14-Longest-Common-Prefix 求若干字符串的最大公共前缀
- 【LeetCode81-90】三道链表,两道找最大面积的hard题,一道二叉树的hard题和一些找自信题……
- (Java) LeetCode 82. Remove Duplicates from Sorted List II —— 删除排序链表中的重复元素 II
- LeetCode之链表数相加
- [Leetcode] Remove duplicates from sorted list 从已排序的链表中删除重复元素
- leetcode-83. Remove Duplicates from Sorted List(删除有序链表中的重复元素)
- 求一个字符串中的最大连续重复子串
- 每天一道LeetCode-----移除有序链表中的重复节点
- LeetCode-Add Two Numbers-链表数字相加-链表操作+加法进位
- LeetCode-2. Add Two Numbers(链表实现数字相加)
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串