010 - leedcode第3题无重复字符的最长子串——基于c++

int lengthoflongerstsubstring::easylonglength(string s)
{
    /**
     * 解法二:滑动窗口的解法
     * 如"abcdadcsfjlkjfkl"
     * 1、滑动窗口从a开始一直滑动到abcda -> abcda 这种情况将舍去首字符a
     * 2、扩展到bcdad出现重复,但是连续性被打断,则得到一个目前最大子字符串
     * 3、将起始坐标定位到第一个d后面的a上,扩展得到adcsfjlkj,连续性又被打断,得到
     *    第二个最大长度的子字符串。
     * 4、将起始坐标定位到第1个j后面的l上,扩展得到lkjfk....继续扩展得到jfkl
     * 5、比较得到最长连续子字符串为adcsfjkl,长度为8。
     */
     int left = 0;
     int _move = 1;
     vector<int> all_length;
     int result = 1;
     if(s.size() == 0) return 0;
     while(_move != s.size())
     {
         if(s[_move] != s[left])  
         {
             ++_move;
             for(int m = left + 1; m < _move; m++)
             {
                 if(s[_move] == s[m]) //
                 {
                     all_length.push_back(_move - left);
                     left = m;
                     _move = left + 1;
                 }
             }
         }else
         {
             ++left;
             if(_move <= left)
             {
                 _move++;
             }
         }
         all_length.push_back(_move - left);
     }
     
     
     for(int m = 0; m < all_length.size(); m++)
     {
         if(all_length[m] > result)
         {
             result = all_length[m];
         }
     }
     cout << "最大子字符串的长度是:" << result << endl;
     return result;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值