1.4 两数相加和无重复字符的最长子串

1.没啥说法

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        int i=0;

        ListNode* l=new ListNode();
         ListNode* p=nullptr;
         p=l;
         int jiwei=0;
          p->val=(l1->val+l2->val+jiwei)%10;
           if((l1->val+l2->val+jiwei)>=10){
             jiwei=1;
        }else{
            jiwei=0;
        }
      while(l1->next!=nullptr&&l2->next!=nullptr){
    ListNode* l3=new ListNode();
           p->next=l3;
           p=p->next;
           l1=l1->next;
           l2=l2->next;
           p->val=(l1->val+l2->val+jiwei)%10;
        if((l1->val+l2->val+jiwei)>=10){
             jiwei=1;
        }else{
            jiwei=0;
        }
           
      }
      
      while(l1->next!=nullptr){
              ListNode* l3=new ListNode();
           p->next=l3;
           p=p->next;
           l1=l1->next;
          p->val=(l1->val+jiwei)%10;
         if(l1->val+jiwei>=10){
               jiwei=1;
        }else{
            jiwei=0;
        }
     
      } 
      while(l2->next!=nullptr){
             ListNode* l3=new ListNode();
           p->next=l3;
           p=p->next;
           l2=l2->next;
          p->val=(l2->val+jiwei)%10;
         if(l2->val+jiwei>=10){
               jiwei=1;
        }else{
            jiwei=0;
        }
      
      }
      if(jiwei==1){
              ListNode* l3=new ListNode();
           p->next=l3;
           p=p->next;
          p->val=1;
      
      }
      return l;
    }
};

2.纯用脑分析,没啥技巧。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int i=0;
        int l=0;
        int l1=0;
        unordered_map<char,int>m;
        if(s.length()==0)return 0;
        while (i<s.length()){
             auto it=m.find(s[i]);
               if(it ==m.end()){
                   m[s[i]]=i;
                   l1++;
               }else{
                   l1=min(i-it->second,l1+1); 
                   m.erase(it);
                   
                   m[s[i]]=i;
                     
               }
               l=max(l,l1);
               i++;
        }
        return l;
    }
};

 map.count也可以用

hash.count(cur)

使用滑动窗口。 

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int i=0;
        int l=0;
        int left=0;
       int n= s.length();
        unordered_map<char,int>m;
        if(n==0)return 0;
        while (i<n){
             auto it=m.find(s[i]);
               if(it !=m.end()){
                l=max(l,i-left);
                left=max(left, m[s[i]]+1);
               }
                   
                   m[s[i]]=i;
                     i++;
               }
              
        
        return max(l,i-left);
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值