字符串
旋转字符串
- 题目描述
给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。
- 解答
可以先在原地进行旋转,例如ab旋转为ba,cdef旋转为fedc,此时变为bafedc,然后再旋转cdefab。
1 | void ReverseString(char* s,int from,int to) |
字符串转换成整数
- 题目描述
输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。 给定函数原型int StrToInt(const char *str) ,实现字符串转换成整数的功能,不能使用库函数atoi。
- 解答
本题的关键是三个部分:防止空指针,避免无效字符,解决溢出问题
1 | int StrToInt(const char* str) |
回文判断
- 题目描述
回文,英文palindrome,指一个顺着读和反过来读都一样的字符串,比如madam、我爱我,这样的短句在智力性、趣味性和艺术性上都颇有特色,中国历史上还有很多有趣的回文诗。 那么,我们的第一个问题就是:判断一个字串是否是回文
- 解答
用两个指针,分别指向首尾,进行遍历;或者两个指针从中间往两边遍历:
1 | bool IsPalindrome1(const char *s, int n) |
字符串的全排列
- 题目描述
输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串abc、acb、bac、bca、cab 和 cba。
- 解答
递归实现,每次固定首个字符,然后递归对后面的字符进行全排列
1 | void CalcAllPermutation(char* perm, int from, int to) |