1、两数之和

  1. var twoSum = function(nums, target) {
  2. const map = new Map();
  3. for(let i=0;i<nums.length;i++){
  4. const complement = target - nums[i];
  5. if(map.has(complement)){
  6. return [map.get(complement),i]
  7. }else{
  8. map.set(nums[i],i)
  9. }
  10. }
  11. return []
  12. };

2、两数相加

  1. var addTwoNumbers = function(l1, l2) {
  2. let dummy = new ListNode();
  3. let curr = dummy;
  4. let carry = 0;
  5. while(l1 !== null || l2 !== null){
  6. let sum = 0;
  7. if(l1 !== null){
  8. sum+=l1.val
  9. l1 = l1.next
  10. }
  11. if(l2 !== null){
  12. sum+=l2.val
  13. l2 = l2.next
  14. }
  15. sum+=carry;
  16. curr.next = new ListNode(sum % 10);
  17. carry = Math.floor(sum/10);
  18. curr = curr.next;
  19. }
  20. if(carry > 0){
  21. curr.next = new ListNode(carry);
  22. }
  23. return dummy.next;
  24. };

3、无重复字符串的最长字符串

  1. var lengthOfLongestSubstring = function(s) {
  2. const set = new Set();
  3. let i=0,j=0,maxLength=0;
  4. if(s.length === 0){
  5. return 0;
  6. }
  7. for(i;i<s.length;i++){
  8. if(!set.has(s[i])){
  9. set.add(s[i]);
  10. maxLength = Math.max(maxLength,set.size);
  11. }else{
  12. while(set.has(s[i])){
  13. set.delete(s[j]);
  14. j++;
  15. }
  16. set.add(s[i]);
  17. }
  18. }
  19. return maxLength;
  20. };

4、最长回文字符串

  1. var longestPalindrome = function(s) {
  2. if(s.length<2){
  3. return s;
  4. }
  5. let maxLength = 1;
  6. let start = 0;
  7. expandAroundCenter = function(left,right){
  8. while(left>=0 && right<s.length && s[left]===s[right]){
  9. if(right-left+1>maxLength){
  10. maxLength = right-left+1;
  11. start = left;
  12. }
  13. left--;
  14. right++;
  15. }
  16. }
  17. for(let i=0;i<s.length;i++){
  18. expandAroundCenter(i-1,i+1);
  19. expandAroundCenter(i,i+1);
  20. }
  21. return s.substring(start,start + maxLength);
  22. };