判断一个字符串是否是另一个字符串翻转后的结果
2017-08-13 14:08
387 查看
字符串abcdef向左翻转一位的结果为fabcde,向右翻转翻转一位的结果为bcdefa.向左翻转两位的结果为efabcd,向右翻转两位的结果为cdefab。
要判断一个字符串是否是另一个字符串翻转后的结果,必须遍历向左翻转和向右翻转0-len(arr)-1位的所有情况。
我定义了一个翻转函数reverse,返回值为空,参数为两个指针,第一个是翻转的起始地址,第二个是翻转的结束地址。要想实现向左翻转n位的效果,先对字符串整体翻转,然后把第n位,到len(arr)-1位进行翻转就得到了向左翻转的结果。要实现向右翻转,也是对整体翻转,然后把第0位到第n位进行翻转就得到了向右翻转的结果。
为了节约空间,我没有开辟其他数组,所以每次翻转后,还需要把字符串恢复为原始的abcdef。
实现代码如下
要判断一个字符串是否是另一个字符串翻转后的结果,必须遍历向左翻转和向右翻转0-len(arr)-1位的所有情况。
我定义了一个翻转函数reverse,返回值为空,参数为两个指针,第一个是翻转的起始地址,第二个是翻转的结束地址。要想实现向左翻转n位的效果,先对字符串整体翻转,然后把第n位,到len(arr)-1位进行翻转就得到了向左翻转的结果。要实现向右翻转,也是对整体翻转,然后把第0位到第n位进行翻转就得到了向右翻转的结果。
为了节约空间,我没有开辟其他数组,所以每次翻转后,还需要把字符串恢复为原始的abcdef。
实现代码如下
#include<stdio.h> #include<stdlib.h> #include<string.h> void reverse(char* begin, char* end) { int tmp = 0; //char* p = begin; while (begin< end) { tmp = *begin; *begin = *end; *end = tmp; begin++; end--; } } int cmp_reverse(char arr[], char arr2[],int len,char * begin) { if (strcmp(arr, arr2) == 0) { return 1; } for (int i = 1; i < len; i++) { reverse(begin, begin + len-1); reverse(begin+i, begin + len-1); if (strcmp(arr, arr2) == 0) { return 1; } else { reverse(begin + i, begin + len - 1); reverse( begin, begin + len - 1); } } for (int i = 1; i < len; i++) { reverse(begin, begin + len - 1); reverse(begin , begin+ len -1 -i); reverse(begin + len - i, begin + len - 1); if (strcmp(arr, arr2) == 0) { return 1; } else { reverse(begin + len - i, begin + len - 1); reverse(begin, begin + len - 1 - i); reverse(begin, begin + len -1); } } return 0; } int main() { char arr[] = "abcdef"; char arr2[] = "cdefab"; int len = strlen(arr); char * begin = arr; //char * end = &arr[len - 1]; //char * p = end; if (cmp_reverse(arr,arr2,len,begin) == 1) printf("y"); else printf("n"); //printf("%s", arr); system("pause"); return 0; }
相关文章推荐
- 判断一个字符串是否是另一个字符串旋转后的结果,假设有个函数Substring判断一个字符是否为另一个字符的子字符串并且这个函数只能用一次
- C语言--判断一个字符串是否为另一个字符串的旋转
- Java中判断一个字符串是否包含另一个字符串的方法
- 判断一个字符串中的字符是否都在另一个中出现
- 判断一个字符串是否在另一个字符串中
- 用一个Python程序来判断一个字符串是否是另一个字符串的sublist
- [LintCode]判断一个字符串是否包含另一个字符串的所有字符
- poj 3630 Phone List 【字典树】【判断一个字符串集里面 是否存在一个字符串是另一个字符串前缀】
- [数据库][SQLServer]判断一个字符串中是否包含另一个字符串
- 判断一个给定的字符串通过循环移位是否可以包含另一个字符串
- 判断一个字符是否是另一个字符的旋转字符串
- php如何判断一个字符串是否包含另一个字符串
- Oracle判断一个字符串是否包含另一个字符串
- php如何判断一个字符串是否包含另一个字符串
- 判断一个字符串是否为另一个字符串的子串
- c语言中判断一个字符串是否包含另一个字符串
- php怎样判断一个字符串是否包含另一个字符串?
- php之substr_count判断一个字符串是否包含另一个字符串
- CCI 1.8 判断一个字符串是否为另一个字符转旋转而得
- HDOJ-1671 Phone List 字典树的应用----判断一组字符串中是否有一个字符串是另一个字符串的前缀(字典树第二类应用)。