字符串旋转——C语言
作者简介: 博主在读计科双非本科,目前大二,正在学习JAVA,数据库,操作系统,计算机网络,数据结构,JAVA Web等…
个人主页:熬夜磕代码丶
作品专栏: 从0到1,学习算法
⭐我变秃了,也变强了⭐
给大家介绍一款程序员必备刷题平台——牛客网
点击注册一起刷题收获大厂offer吧
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
文章目录
- 一、方法一(暴力求解法)
- 代码实现
- 二、方法二(三步翻转法)
- 1.思路
- 2.代码实现
- 三、方法三(字串判断法)
- 1.思路
- 2.代码实现
一、方法一(暴力求解法)
代码实现
#include<stdio.h>
#include<assert.h>
void left_move(char* arr, int len, int n)
{assert(arr && len > 0 && n >= 0);n = n % len;//为了避免n大于字符串长度,浪费时间while (n){char ret = arr[0];int i = 0;for (i = 0; i < len-1; i++){arr[i] = arr[i + 1];}arr[i] = ret;n--;}
}
int main()
{char arr1[] = "woyaojindachang";char arr2[] = "jindachangwoyao";int len = strlen(arr1);int i = 0;for ( i = 0; i < len; i++){if (strcmp(arr1, arr2) == 0){printf("yes\n");break;}left_move(arr1, len, 1);}if (i == len){printf("no");}return 0;
}
二、方法二(三步翻转法)
1.思路
将代码分为2部分:1.要旋转的部分 2.不旋转的部分
三步翻转分别为:1.将要旋转的旋转 2.将不旋转的旋转 3.整体旋转
例如
ABCD 要旋转两个字符–> AB CD
1.先将旋转部分ab逆序–>BA CD
2.再将不旋转部分逆序–>BA DC
3.最后全部逆序–>CDAB
2.代码实现
void move(char* arr, int start, int end)
{while (start < end){char t = arr[start];arr[start] = arr[end];arr[end] = t;start++;end--;}
}
void left_move(char* arr, int len, int n)
{assert(arr && len > 0 && n >= 0);n = n % len;move(arr, 0, n - 1);move(arr, n, len - 1);move(arr, 0, len - 1);
}int main()
{char arr1[] = "woyaojindachang";char arr2[] = "jindachangwoyao";int len = strlen(arr1);int i = 0;for (i = 0; i < len; i++){if (strcmp(arr1, arr2) == 0){printf("yes\n");break;}left_move(arr1, len, 1);}if (i == len){printf("no");}return 0;
}
三、方法三(字串判断法)
1.思路
将一旋转字符串自身连接,然后判断另一个字符串是否为连接后的字符串的子串,如果是,则是旋转后的字符串,否则,相反。
2.代码实现
int is_left_move(char* arr1, char* arr2)
{int len1 = strlen(arr1);int len2 = strlen(arr2);if (len1 != len2){return 0;}strncat(arr1, arr1, len1);//追加自身字符串必须使用strncat,strcat适用不同字符串连接char* ret = strstr(arr1, arr2);//判断arr1里有没有子串arr2if (ret == NULL)return 0;elsereturn 1;
}
int main()
{char arr[20] = "AABCD";char arr1[] = "ABCDA";int n = is_left_move(arr, arr1);if (n){printf("YES\n");}else{printf("NO\n");}return 0;
}
字符串旋转——C语言相关推荐
- C语言——字符串旋转问题
字符串的旋转: ABCD左旋一个字符为BCDA ABCD左旋两个字符为CDAB ABCD右旋一个字符为DABC ABCD右旋两个字符为CDAB 这里只写了左旋,右旋的原理和左旋一样. 目录 实现旋转字 ...
- C语言习题——字符串旋转结果
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串. 有两种思路: 1.每左旋一个字符,判断是否和输入的字符串相等. 2.给原字符串后面追加其本身,查找输入的字符串是否为追加后的字符串的子 ...
- C语言---写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串
题目: 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串. #include <string.h> #include <stdio.h> void left_re ...
- C语言基础10——指针进阶。字符指针、指针数组、数组指针、函数指针、函数指针数组、回调函数、数组名详解、杨氏矩阵、字符串旋转
目录 字符指针 指针数组 数组指针 数组传参.指针参数 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 练习 数组名的意义 指针笔试题 字符指针 字符指针的另一种使用方式 #include ...
- 华为机考HJ4字符串分隔C语言题解
华为机考HJ4字符串分隔C语言题解 好家伙,今天的while循环检测文件末尾又好使了. 把白给打在公屏上. 主要思路就是求余的花样使用. 首先把字符串数组里的内容全部放入新的数组. 新的数组每满八个就 ...
- 判断一个字符串是否为另外一个字符串旋转之后的字符串。
★判断一个字符串是否为另外一个字符串旋转之后的字符串. 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0. AABCD左旋一个字符得到ABCDA ...
- java语言中json转换,JSON字符串和JAVA语言对象的相互转换教程
本文主要向大家介绍了JSON字符串和JAVA语言对象的相互转换教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一:字符串转换为对象:使用JSON.parse()方法 var st ...
- c 字符串数组_C语言探索之旅 | 第二部分第四课:字符串
内容简介 前言 字符类型 显示字符 字符串其实就是字符的数组 字符串的创建和初始化 从 scanf 函数取得一个字符串 操纵字符串的一些常用函数 总结 第二部分第五课预告 1. 前言 上一课 C语言探 ...
- 关于字符串旋转问题的一些心得
最近在学习编程,跟着B站一起在学习,讲了一个字符串旋转的问题,想写个博客记录一下,下面是这个题的题目. 题目内容: 实现一个函数,可以左旋字符串中的k个字符 例如: ABCD左旋一个字符得BCDA A ...
最新文章
- python excel操作单元格_python 操作excel表格的方法
- [Node]node.js 文件操作
- Codeforces Divisibility【水题】
- leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法
- 遍历children_589. N叉树的前序遍历
- 插值问题(拉格朗日插值、牛顿插值)
- Flash,EEPROM差别
- 针对ARP协议的病毒攻击的简单分析
- 官方授权正版 Avast AntiTrack Premium 反跟踪工具软件
- w10计算机名重新启动此计算机后,win10电脑关机后自动重启怎么回事?原因与解决办法...
- xp系统计算机启动时灰色界面,XP系统任务管理器是灰色的打不开怎么办
- linux怎么进入自己添加的软盘,linux – 创建没有mount的虚拟软盘映像?
- 20190323——Python IO编程
- 量化投资之工具篇一:Backtrader从入门到精通(5)-Strategy类源代码解读
- IDEA 在hdfs中创建目录
- 中职网络安全—隐藏信息探索
- 用阿里云托管服务器怎么托管_云托管使企业更具竞争力的8个原因
- 万字综述!命名实体识别(NER)的过去和现在
- 软件领域专利申请的基本特点
- Excel催化剂开源第31波-pdf相关功能实现及类库介绍
热门文章
- 第七届飞思卡尔智能车光电组代码
- 基于Dijkstra最短路径算法的栅格地图避障路线规划仿真
- java web国外 研究现状_国外javaWeb开发技术.doc
- Axure rp简单介绍及下载安装详细步骤
- 07 Android 植物人大战僵尸-修复放置卡片重叠Bug
- ipad 查看电池寿命
- Ghost超级助手 1.00 beta II
- Android单目手势识别,手势追踪研究与手势识别应用平台实现
- 【面试题】1014- 面试官:如何使用CSS完成视差滚动效果?
- 海外优秀资讯抢先看6:私有应用云平台Sandstorm服务对象之开发人员