题目定义了一个单链表,对两个链表求和:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode vHead(0), *p = &vHead;
int flag = 0;
while(l1||l2||flag)
{
int tmp = 0;
if(l1!=nullptr) tmp += l1->val;
if(l2!=nullptr) tmp += l2->val;
tmp += flag;
flag = tmp / 10;
tmp %= 10;
ListNode *next = new ListNode(tmp);
p->next = next;
p = p->next;
l1 = l1 ? l1->next : nullptr;
l2 = l2 ? l2->next : nullptr;
}
return vHead.next;
}
};
注意:空指针表示为nullptr
题目二:无重复字符的最长字串
首先定义一个last数组,记录每个字符最后出现的位置,该数组128长度,初始值为-1。其次,进行循环,start表示起始,j表示结束,start = max(start,last[j]+1),res表示结果,res = max(res, j-start+1)
class Solution {
public int lengthOfLongestSubstring(String s) {
int[] last = new int[128];
for(int i=0; i<128; i++){
last[i] = -1;
}
int n = s.length();
int res = 0;
int start = 0;
for(int i=0; i<n; i++)
{
int index = s.charAt(i);
start = Math.max(start, last[index]+1);
res = Math.max(res, i-start+1);
last[index] = i;
}
return res;
}
}