leetcode_003

对算法一窍不通,然后就去leetcode研究题目,参考别人的思路,然后去理解透了

当然leetcode第3题网上有很多解法,大师级,入门级的,我选择了比较适合自己理解的解法


    双指针法(C++):

/*
** 方法:采用双指针法 先用i表示子串的头部,用j表示子串的尾部,通过find函数记录下子串
** 		 的位置,如果长度大于原先len,就替换掉,循环判断即可,最后别忘了再次替换len
*/
class Solution {  
public:  
    int lengthOfLongestSubstring(string s) {  
        if(s.empty()){  /*首先判断是否为空*/
            return 0;  
        }  
        int i = 0, j = 1;  /*i表示子串头部,j表示子串尾部*/
        int len = 0;  		/*子串长度*/
        while(j < s.size()){  /*总字符串的长度*/
            string t = s.substr(i, j - i);  /*substr()函数可以根据i,j来截取子串*/
            int pos = t.find(s.at(j));  /*发现字符串的下标*/
            if (pos < t.size()){       /*保证pos在总字符串之内*/
                if (len < j - i){  /*如果发现子串比之前的长度长,就替换掉原来的长度*/
                    len = j - i;  
                }  
                i =  i + pos + 1;  /*子串头部位置要更新,向后移一位*/
            }  
            ++j; 
        }  
        if (len < j - i){  /*跳出循环记得保存结果*/
            len = j - i;  
        }  
        return len;  
    }  
};  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值