1、两数之和
var twoSum = function(nums, target) { const map = new Map(); for(let i=0;i<nums.length;i++){ const complement = target - nums[i]; if(map.has(complement)){ return [map.get(complement),i] }else{ map.set(nums[i],i) } } return []};
2、两数相加
var addTwoNumbers = function(l1, l2) { let dummy = new ListNode(); let curr = dummy; let carry = 0; while(l1 !== null || l2 !== null){ let sum = 0; if(l1 !== null){ sum+=l1.val l1 = l1.next } if(l2 !== null){ sum+=l2.val l2 = l2.next } sum+=carry; curr.next = new ListNode(sum % 10); carry = Math.floor(sum/10); curr = curr.next; } if(carry > 0){ curr.next = new ListNode(carry); } return dummy.next;};
3、无重复字符串的最长字符串
var lengthOfLongestSubstring = function(s) { const set = new Set(); let i=0,j=0,maxLength=0; if(s.length === 0){ return 0; } for(i;i<s.length;i++){ if(!set.has(s[i])){ set.add(s[i]); maxLength = Math.max(maxLength,set.size); }else{ while(set.has(s[i])){ set.delete(s[j]); j++; } set.add(s[i]); } } return maxLength;};
4、最长回文字符串
var longestPalindrome = function(s) { if(s.length<2){ return s; } let maxLength = 1; let start = 0; expandAroundCenter = function(left,right){ while(left>=0 && right<s.length && s[left]===s[right]){ if(right-left+1>maxLength){ maxLength = right-left+1; start = left; } left--; right++; } } for(let i=0;i<s.length;i++){ expandAroundCenter(i-1,i+1); expandAroundCenter(i,i+1); } return s.substring(start,start + maxLength);};