*滑动窗口模板 *(来源于 labuladong )
void slidingWindow ( string s, string t) {
unordered_map< char , int > need, window;
for ( char c : t) need[ c] ++ ;
int left = 0 , right = 0 ;
int valid = 0 ;
while ( right < s. size ( ) ) {
char c = s[ right] ;
right++ ;
. . .
printf ( "window: [%d, %d)\n" , left, right) ;
while ( window needs shrink) {
char d = s[ left] ;
left++ ;
. . .
}
}
}
3. 无重复字符的最长子串
class Solution {
public :
int lengthOfLongestSubstring ( string s) {
int len= s. size ( ) ;
if ( len== 0 ) return 0 ;
if ( len== 1 ) return 1 ;
int max_len= 0 ;
int l= 0 ;
int r= 0 ;
string str;
while ( r< len)
{
str. push_back ( s[ r] ) ;
r++ ;
int index= str. find ( s[ r] ) ;
if ( index!= - 1 )
{
max_len= max ( max_len, ( r- l) ) ;
if ( index== str. size ( ) - 1 )
{
str= "" ;
l= r;
}
else if ( index< str. size ( ) - 1 && index> 0 )
{
str= str. substr ( index+ 1 , str. size ( ) - 1 ) ;
l= l+ index+ 1 ;
}
else if ( index== 0 )
{
str= str. substr ( 1 , str. size ( ) ) ;
l++ ;
}
}
max_len= max ( max_len, ( r- l) ) ;
}
return max_len;
}
} ;
class Solution {
public :
int lengthOfLongestSubstring ( string s) {
if ( s. size ( ) == 0 ) return 0 ;
unordered_set< char > lookup;
int maxStr = 0 ;
int left = 0 ;
for ( int i = 0 ; i < s. size ( ) ; i++ ) {
while ( lookup. find ( s[ i] ) != lookup. end ( ) ) {
lookup. erase ( s[ left] ) ;
left ++ ;
}
maxStr = max ( maxStr, i- left+ 1 ) ;
lookup. insert ( s[ i] ) ;
}
return maxStr;
}
} ;
作者:powcai
链接:https:
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。