剑指Offer42 左旋字符串

 1 /*************************************************************************
 2     > File Name: 42_LeftRotateString.c
 3     > Author: Juntaran
 4     > Mail: [email protected]
 5     > Created Time: 2016年09月04日 星期日 16时31分43秒
 6  ************************************************************************/
 7
 8 #include <stdio.h>
 9 #include <string.h>
10
11 // 反转单词
12 void ReverseWord(char* left, char* right)
13 {
14     if (left== NULL || right==NULL)
15         return;
16     while (left < right)
17     {
18         char temp = *left;
19         *left = *right;
20         *right = temp;
21
22         left ++;
23         right --;
24     }
25 }
26
27 void LeftRotateString(char* str, int n)
28 {
29     if (str == NULL || n<=0)
30         return str;
31
32     int length = strlen(str);
33     // n可能超过字符串长度
34     n = n % length;
35
36     // 第一部分
37     char* FirstStart = str;
38     char* FirstEnd   = str + n - 1;
39
40     // 第二部分
41     char* SecondStart = str + n;
42     char* SecondEnd   = str + length - 1;
43
44     // 先反转第一部分
45     ReverseWord(FirstStart, FirstEnd);
46     // 再反转第二部分
47     ReverseWord(SecondStart, SecondEnd);
48     // 整体反转
49     ReverseWord(FirstStart, SecondEnd);
50 }
51
52 int main()
53 {
54     char str[] = "abcdefg";
55     int n = 9;
56
57     LeftRotateString(str, n);
58     printf("%s\n", str);
59 }
时间: 2024-10-11 12:46:50

剑指Offer42 左旋字符串的相关文章

【剑指offer】字符串的排列

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26390551 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入: 每个测试案例包括1行. 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 输出: 对应每组数据,按字典序输出所有排列. 样例输入: abc BCA 样例输出:

【剑指offer】字符串的组合

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26405471 剑指offer上的拓展题目,输入一个字符串,输出该字符串的字符的所有组合,比如输入字符串:abc,输出a.b.c.ab.ac.bc.abc. 思路:与上一题类似,也可以用递归求解.可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m).原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和.对于求C(n, m),从第一个字符开始扫描,每个字符有两种

剑指offer (49) 字符串转数字

class Test { public: Test() : n2(0), n1(n2 + 2) { } private: int n1; int n2; }; 调用构造函数之后,n1个n2各为多少? 分析:构造函数的初始化顺序仅仅取决于成员变量的声明顺序,所以这是 应该是 n1先初始化,然后是n2初始化 当n1初始化值 = n2值 + 2,此时n2并没有初始化,n2为内置类型并且是non-static,所以n2此时为随机值 故 n1 为随机值,n1初始完之后,n2初始化为0 最终 n1为随机值,

【剑指offer】字符串转整数

转载请注明出处:http://blog.csdn.net/ns_code/article/details/28015693 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000). 输出: 对应每个测试案例,若输入为一个合法的字符串(即代表一个整数),则输出这个整数.若输入为一个非法的字符串,则输出"My God". 样

剑指offer 52.字符串 正则表达式匹配

题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 解题思路 解这题需要把题意仔细研究清楚,反正我试了好多次才明白的.   首先,考虑特殊情况:   1&

剑指offer 把字符串转化为整数

题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入 +2147483647 1a33 输出 2147483647 0 思路:字符串转化为整数的方法num = num * 10 + str[i] - '0':特殊情况:1.输入字符串为NULL: 2.输入字符串只有+/-: 3.转化的数字大于最大值或小于

剑指offer—替换字符串中空格

题目: 实现一个函数,把字符串中的每个空格替换成"%20".加入输入"we are happy.",则输出"we%20are%20happy.". 时间复杂度为O(n^2) 基本思想:从前往后把字符串中的空格替换成%20. 假设字符串的长度为n,对每个空格字符,需要移动后面O(n)个字符,因此总的时间复杂度为O(n^2). 时间复杂度为O(n) 基本思想:先遍历找出空格总数,并计算出替换之后的字符串的总长度.然后从字符串的后面开始复制和替换. 所

剑指offer——替换字符串

总结:先计算出总共有多少空格,count++:然后从后往前遍历,每遇到一个空格,count--: 替换空格 参与人数:2119时间限制:1秒空间限制:32768K 通过比例:20.23% 最佳记录:0 ms|8552K(来自  牛客游客) 题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 完整代码: public class StringreplaceSpace { public

剑指Offer——把字符串转换成整数

题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入 +2147483647 1a33 输出 2147483647 0 分析: 只可能在最开始一位出现符号,所以我们特殊判断第一位,之后都得是数字字母,不然不合法. 代码: 1 class Solution { 2 public: 3 int StrTo