leedcode第三題無重複字元的最長子串——基於c++
阿新 • • 發佈:2018-12-12
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; }