字符串的最长不重复字串

(start,i)表示当前发现的最大长度不重复字串,当遍历到i+1时候,看a[i+1]是不是在(start,i)里面(用map),有两种情况

    其中map<char,idex> 记录每个字符出现的位置。

    1)如果在map里且当前遍历索引>start,那么计算目前最大长度MAX=max(i-start,MAX),并且更新start=m[c]+1;

    2) 否则,那么更新最大长度+1。

int longestSubstring(string A, int n) {
     map<char, int> m; //表示字符串中每个字符是否出现,初始化为0,表示未出现  
     int start = 0,MAX = 0;  
     //遍历该字符串,每遍历一个字母时,利用map去找该字母最近一次出现是什么时候  
     //中间这一段便是无重复字符的字符串。  
     for (int i = 0; i <= n; i++){  
         char c = A[i];    
         if (m.find(c)!=m.end() && m[c] > start){    
             start = m[c] + 1;  
             MAX=max(i-start,MAX);
         }
         else{
             MAX = max(MAX, i - start + 1); 
         }
         m[c] = i;   //map添加数据  mapStudent[char] = int 
     }    
     return MAX;
}


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值