Two Pointers
String
Description
Given a string s
and an integer k
, reverse the first k
characters for every 2k
characters counting from the start of the string.
If there are fewer than k
characters left, reverse all of them. If there are less than 2k
but greater than or equal to k
characters, then reverse the first k
characters and leave the other as original.
Example 1:
Input: s = "abcdefg", k = 2
Output: "bacdfeg"
Example 2:
Input: s = "abcd", k = 2
Output: "bacd"
Constraints:
1 <= s.length <= 104
s
consists of only lowercase English letters.
1 <= k <= 104
Solutions
Solution 1
Python3 Java C++ Go
class Solution :
def reverseStr ( self , s : str , k : int ) -> str :
t = list ( s )
for i in range ( 0 , len ( t ), k << 1 ):
t [ i : i + k ] = reversed ( t [ i : i + k ])
return '' . join ( t )
1
2
3
4
5
6
7
8
9
10
11
12
13 class Solution {
public String reverseStr ( String s , int k ) {
char [] chars = s . toCharArray ();
for ( int i = 0 ; i < chars . length ; i += ( k << 1 )) {
for ( int st = i , ed = Math . min ( chars . length - 1 , i + k - 1 ); st < ed ; ++ st , -- ed ) {
char t = chars [ st ] ;
chars [ st ] = chars [ ed ] ;
chars [ ed ] = t ;
}
}
return new String ( chars );
}
}
class Solution {
public :
string reverseStr ( string s , int k ) {
for ( int i = 0 , n = s . size (); i < n ; i += ( k << 1 )) {
reverse ( s . begin () + i , s . begin () + min ( i + k , n ));
}
return s ;
}
};
func reverseStr ( s string , k int ) string {
t := [] byte ( s )
for i := 0 ; i < len ( t ); i += ( k << 1 ) {
for st , ed := i , min ( i + k - 1 , len ( t ) - 1 ); st < ed ; st , ed = st + 1 , ed - 1 {
t [ st ], t [ ed ] = t [ ed ], t [ st ]
}
}
return string ( t )
}
GitHub