1. 程式人生 > >leedcode第三題無重複字元的最長子串——基於c++

leedcode第三題無重複字元的最長子串——基於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;
}