判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
题目:
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
思路:把源字符串追加到源字符串后边,这样问题就转化成了查找字串。可以利用strstr函数来完成,但是这里一定要注意还要进行长度的判断,因为旋转过后的字符串长度与原来字符串长度应该是相等的。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int Judge_str(char*str, char*substr)
{assert(str);assert(substr);int ret;int len_str = strlen(str);int len_substr = strlen(substr);char*tmp = malloc(sizeof(char)*(2 * len_str + 1));if (tmp == NULL){printf("申请空间失败 !\n");exit(1);}strcpy(tmp, str);strncat(tmp, str, len_str);char*p = strstr(tmp, substr);//注意这里不能用tmp接收,因为如果查找到,则返回的是字串第一次出现的位置,而如果用tmp接收,则free(tmp)地址就变了,不是free掉原来开辟内存空间的起始地址处if (p&&len_substr == len_str)//这里一定要检测空间有没有开辟成功{ret = 1;}else{ret = 0;}free(tmp);return ret;
}int main()
{char str1[] = "AABCD";char str2[] = "BCDAU";int ret = Judge_str(str1, str2);if (ret == 1){printf("str2是str1旋转过后的串\n");}else{printf("str2不是str1旋转过后的串\n");}system("pause");return 0;
}
思路二:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
//左旋字符串
void Reverse(char*left, char*right)
{while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}void Reverse_K(char*str, int k)
{int len = strlen(str);k %= len;//k有可能大于字符串的长度,但这也是合理的,相当于转了一圈,然后再移Reverse(str, str + len - 1);//整体翻转Reverse(str, str + len - 1 - k);//再翻转前半部分Reverse(str + len - k, str + len - 1);//翻转后半部分
}int IsLeftRotate(char*str1, char*str2)
{int ret;int len1 = strlen(str1);int len2 = strlen(str2);if (len1 != len2){return 0;}while (len1){Reverse_K(str1, 1);if (strcmp(str1, str2) == 0){return 1;}len1--;}return 0;
}int main()
{char str1[] = "ABCD";char*str2 = "BCDA";Reverse_K(str1, 3);int ret = IsLeftRotate(str1, str2);if (ret == 1){printf("str2是str1旋转过后的串\n");}else{printf("str2不是str1旋转过后的串\n");}system("pause");return 0;
}
判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.相关推荐
- C语言---写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串
题目: 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串. #include <string.h> #include <stdio.h> void left_re ...
- 两种方法判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言)...
例如:给定s1 = AABCD和s2 = BCDAA,返回1 给定s1 = abcd和s2 = ACBD,返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 第一种: ...
- 字符串左旋问题及判断一个字符串是否由另一个字符串左旋得到
字符串左旋问题 问题描述 左旋字符串中的k个字符.例如 ABCD左旋一个字符得到BCDA ,ABCD左旋两个字符得到CDAB 解法一:暴力破解法 先左旋一个字符 将字符串首个字符保存在temp中 字符 ...
- 判断一个字符串是否为另外一个字符串旋转之后的字符串。
★判断一个字符串是否为另外一个字符串旋转之后的字符串. 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0. AABCD左旋一个字符得到ABCDA ...
- java检查两个字符串是否包含,java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含...
java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含 要检查一个字符串是否包含另外一个字符串需要使用indexOf()方法,如果indexOf方法返回大于等于0的值 ...
- Java 中判断一个字符串是否包含另外一个字符串的方法
方法一:indexOf(String s) 可以配合indexOf(String s)的使用,如果包含,返回的值是包含该子字符串在父类字符串中起始位置:如果不包含必定全部返回值为-1 public v ...
- C 判断一个字符串是否包含另一个字符串
如何判断一个字符串是否包含另一个字符串? 思路:从一个字符串中提取出可能与另一个字符串相同的部分,再进行比较. 代码: #include <stdio.h> #include <st ...
- c语言编程判断输入的一个字符串是否是“回文”。所谓“回文”字符串就是左读和右读都一样的字符串。例如: “abcba“就是一个回文字符串。
编程判断输入的一个字符串是否是"回文".所谓"回文"字符串就是左读和右读都一样的字符串.例如: "abcba"就是一个回文字符串. 要求:先 ...
- java字符串中包含_怎么判断一个字符串是否包含另一个字符串
第一步骤:判断一个字符串是否包含另一个字符串. 1.思路整理 首先我们可以借助于java中String类提供的indexOf方法 2.代码如下 public class TestString { pu ...
最新文章
- python创建一个有序链表_算法2-2:生成递增有序链表+两个链表合并
- VSCode摸鱼插件 — FreeWindow
- HTML day02
- jquery报变量没定义错误的原因
- Confluence 6 升级以后
- 遍历集合的两种方式:迭代器和增强型for循环
- 基于libmemcached为php扩展memcached服务
- 如何修改vue打包的名字_教你如何修改Mac的电脑名字
- 如何构建NTP时间服务器
- sql server 性能调优之 资源等待PAGEIOLATCH
- 佳能g2810打印机扫描怎么用_佳能 G2810说明书.pdf
- Python3爬取起点中文网阅读量信息,解决文字反爬~~~附源代码
- java 离线版语音转文字
- (Python编程)稳定的copra算法(copra-ep)
- 申请Apple ID
- 【python】wxpy--微信接口库
- 平面设计学费,平面设计学费大概多少:夏雨老师
- python 时间表_python获取起止日期段中的时间列表
- 寻找指定长度以内的最短连续子段和
- 【Acwing并查集】238. 银河英雄传说