File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change
1
+ /*
2
+ 给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
3
+
4
+ 示例:
5
+
6
+ 输入: s = "abcdefg", k = 2
7
+ 输出: "bacdfeg"
8
+
9
+ 要求:
10
+
11
+ 该字符串只包含小写的英文字母。
12
+ 给定字符串的长度和 k 在[1, 10000]范围内.
13
+ */
14
+
15
+ void reverse(char* s, int p_left, int p_right)
16
+ {
17
+ while(p_left < p_right)
18
+ {
19
+ char tmp;
20
+ tmp = s[p_left];
21
+ s[p_left] = s[p_right];
22
+ s[p_right] = tmp;
23
+
24
+ p_left++;
25
+ p_right--;
26
+ }
27
+ }
28
+
29
+ char* reverseStr(char* s, int k)
30
+ {
31
+ int s_len = strlen(s);
32
+ for(int i = 0; i < s_len; i += 2 * k)
33
+ {
34
+ if(i + 2 * k <= s_len || i + k <= s_len)
35
+ reverse(s, i, i+k-1);
36
+ else
37
+ reverse(s, i, s_len-1);
38
+ }
39
+ return s;
40
+ }
41
+
42
+ /*
43
+ 这道题就是在反转字符串1(整体字符串全部反转)的基础上,设置了反转区间进行分段反转。
44
+ 因此,可以直接将整体字符串反转的函数当做本函数的调用子函数,本函数的主体进行字符串的分段控制即可。
45
+ 分段相当于是将字符串中的每k个字符分成一组,交叉反转,所以循环的累加步长是2 * k;
46
+ 如果没有到最后一组,则满足i + 2 * k <= s_len;此时反转每一组中的前k个字符,即i到i+k-1区间;
47
+ 如果到了最后一组,若最后一组不到2*k个字符,则满足i + k <= s_len;此时反转字符串中的前k个字符,即i到i+k-1区间;
48
+ 如果到了最后一组,若最后一组不到k个字符,则从当前字符起到最后一个字符全部反转,即i到s_len-1区间。
49
+ */
You can’t perform that action at this time.
0 commit comments