字符串左旋N个字符

题目

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1.
给定s1 = abcd和s2 = ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
解题思路:右旋一个相当于左旋len-1个,故只要验证字符串是否等于左旋1~len个的结果即可。

最初版本

#include <stdio.h>
#include <string.h>void reverse(char* left,char* right)
{while (left < right){char temp = *left;*left = *right;*right = temp;left++;right--;}
}
void left_spin(char* ch,int len,int i)//左旋i个元素  abcdef 左旋2个元素 cdefab 左旋len个元素时第二个reverse因为left>right而不执行
{reverse(ch, ch + i - 1);reverse(ch + i, ch + len - 1);reverse(ch, ch + len - 1);}
int is_left_spin(char* ch, int len, char* str)
{int i = 0;for (i = 1; i <= len; i++) //最多可以左旋len个元素{left_spin(ch, len, 1); //注意此处不是left_spin(ch, len, i),应是left_spin(ch, len, 1)每左移一位,ch就发生了变化if (strcmp(ch, str) == 0) return 1;}return 0;
}
int main()
{char ch1[] = "student";int len = strlen(ch1);char ch2[] = "entstud";/*left_spin(ch1, len,4);printf("%s", ch1);*/if (is_left_spin(ch1, len, ch2)){printf("YES");}elseprintf("NO");return 0;
}

可优化地方
1.len可在函数内部求得,不需要放在main函数
2.可加入assert断言防止出错

优化版本

#include <stdio.h>
#include <string.h>
#include <assert.h>
void reverse(char* left, char* right)
{assert(left && left);while (left < right){char temp = *left;*left = *right;*right = temp;left++;right--;}
}
void left_spin(char* ch,int i)//左旋i个元素  abcdef 左旋2个元素 cdefab 左旋len个元素时第二个reverse因为left>right而不执行
{assert(ch);int len = strlen(ch);assert(i <= len);reverse(ch, ch + i - 1);reverse(ch + i, ch + len - 1);reverse(ch, ch + len - 1);
}
int is_left_spin(char* ch,char* str)
{assert(ch && str);int len = strlen(ch);int i = 0;for (i = 1; i <= len; i++) //最多可以左旋len个元素{left_spin(ch,1); //注意此处不是left_spin(ch, len, i),应是left_spin(ch, len, 1)每左移一位,ch就发生了变化if (strcmp(ch, str) == 0) return 1;}return 0;
}
int main()
{char ch1[] = "student";char ch2[] = "ntstude";if (is_left_spin(ch1,ch2)){printf("YES");}elseprintf("NO");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/231886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中字典是什么

在Python中&#xff0c;字典是一种无序的数据结构&#xff0c;用于存储键-值对。它是通过键来访问值的&#xff0c;而不是通过索引。字典使用大括号{}来定义&#xff0c;每个键-值对之间使用冒号:来分隔。 例如&#xff0c;创建一个字典来表示一个人的信息&#xff0c;可以使用…

pytorch——豆瓣读书评价分析

任务目标 基于给定数据集&#xff0c;采用三层bp神经网络方法&#xff0c;编写程序并构建分类模型&#xff0c;通过给定特征实现预测的书籍评分的模型。 选取数据 在各项指标中&#xff0c;我认为书籍的评分和出版社、评论数量还有作者相关&#xff0c;和其他属性的关系并大。…

K8S学习指南(27)-k8s存储对象Persistent Volume Claim

文章目录 前言什么是Persistent Volume Claim&#xff1f;Persistent Volume Claim的基本结构1. Access Modes&#xff08;访问模式&#xff09;2. Storage Class&#xff08;存储类&#xff09;3. Resources&#xff08;资源需求&#xff09;4. Status&#xff08;状态&#x…

电脑里的ip地址在哪里查找

​互联网的普及使得电脑成为我们日常生活中不可或缺的工具。然而&#xff0c;对于很多人来说&#xff0c;电脑中的IP地址是一个相对陌生的概念。那么&#xff0c;电脑里的IP地址到底在哪里查找呢&#xff1f;本文将详细介绍如何快速查找和设置电脑IP地址&#xff0c;帮助您更好…

MongoDB的数据库引用

本文主要介绍MongoDB的数据库引用。 目录 MongoDB的数据库引用 MongoDB的数据库引用 MongoDB是一种面向文档的NoSQL数据库&#xff0c;它使用BSON&#xff08;Binary JSON&#xff09;格式存储和查询数据。在MongoDB中&#xff0c;数据库引用是一种特殊的数据类型&#xff0c;…

利用gradio快速搭建AI应用

引言 Gradio 是一个用于快速创建交互式界面的Python库&#xff0c;这些界面可以用于演示和测试机器学习模型。使用Gradio&#xff0c;开发者可以非常轻松地为他们的模型构建一个前端界面&#xff0c;而不需要任何Web开发经验。 与类似产品的对比 TensorBoard&#xff1a;主…

【Python从入门到进阶】44、Scrapy的基本介绍和安装

接上篇《43.验证码识别工具结合requests的使用》 上一篇我们学习了如何使用验证码识别工具进行登录验证的自动识别。本篇我们开启一个新的章节&#xff0c;来学习一下快速、高层次的屏幕抓取和web抓取框架Scrapy。 一、Scrapy框架的背景和特点 Scrapy框架是一个为了爬取网站数…

聊一聊后端语言的差异和特性差异

假如有一个需求要实现一个统计的需求&#xff0c;可能不同的人会有不同的实现方式&#xff0c;最为掌握一门编程语言和掌握多门编程语言&#xff0c;以及一年工作经验的编程人员和多年的编程人员的实现思路肯定是不一样的。 例子一&#xff1a;要实现A表中某个条件下&#xff…

JS参数归一化之对日期时间的格式化

/** 辅助函数&#xff1a;参数类型不确定时&#xff0c;找到它们的共同点作处理 */ function _formatNormalize(formatter){if(typeof formatter function){return formatter;}if(typeof formatter ! string){throw new TypeError(formatter must be string or function);}if(…

C++内存布局

温故而知新&#xff0c;本文浅聊和回顾下C内存布局的知识。 一、c内存布局 C的内存布局主要包括以下几个部分&#xff1a; 代码段&#xff1a;存储程序的机器代码。.数据段&#xff1a;存储全局变量和静态变量。数据段又分为初始化数据段&#xff08;存储初始化的全局变量和…

python与机器学习2,激活函数

目录 1 什么是激活函数&#xff1f; activation function 1.1 阈值 1.2 激活函数a(x) &#xff0c;包含偏置值θ 1.3 激活函数a(x) &#xff0c;包含偏置值b 2 激活函数1: 单位阶跃函数 2.1 函数形式 2.2 函数图形 2.3 函数特点 2.4 代码实现这个 单位阶跃函数 3 激活…

Convolutional Neural Network(CNN)——卷积神经网络

1.NN的局限性 拓展性差 NN的计算量大性能差&#xff0c;不利于在不同规模的数据集上有效运行若输入维度发生变化&#xff0c;需要修改并重新训练网络容易过拟合 全连接导致参数量特别多&#xff0c;容易过拟合如果增加更多层&#xff0c;参数量会翻倍无法有效利用局部特征 输入…

结构型设计模式(三)享元模式 代理模式 桥接模式

享元模式 Flyweight 1、什么是享元模式 享元模式的核心思想是共享对象&#xff0c;即通过尽可能多地共享相似对象来减少内存占用或计算开销。这意味着相同或相似的对象在内存中只存在一个共享实例。 2、为什么使用享元模式 减少内存使用&#xff1a;通过共享相似对象&#…

汽车UDS诊断——SecureDataTransmission 加密数据传输(0x84)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍诊断和通讯管理功能单元下的84服务SecureDataTransmission,在常规诊断通信中,数据极易被第三方获取,所以在一些特殊的数据传输时,标准定义了加密数据传输的服务。 简而言之,就是在发送诊断数据时,发送方先把数…

leetCode算法—7. 整数反转

给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 1&#xff1a; 输入…

fragstats:景观指数的时间序列分析框架

作者&#xff1a;CSDN _养乐多_ 本文将介绍景观指数的时间序列分析计算的软件使用方法和 python 代码&#xff0c;该框架可用于分析景观指数时间序列图像的趋势分析、突变分析、机器学习&#xff08;分类/聚类/回归&#xff09;、相关性分析、周期分析等方面。 文章目录 一、…

智能优化算法应用:基于人工电场算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工电场算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工电场算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工电场算法4.实验参数设定5.算法结果6.…

C#连接数据库40错误

与 SQL Server 2012 建立连接时出现与网络相关的或特定于实例的错误。_server sql2012数据库建立连接时出现与网络相关的或特定于实例的错误-CSDN博客

04-Revision和流量管理

1 Revision 关于Revision 应用程序代码及相关容器配置某个版本的不可变快照KService上的spec.template的每次变动&#xff0c;都会自动生成一个新的Revision通常不需要手动创建及维护 Revision的使用场景 将流量切分至不同版本的应用程序间&#xff08;Canary Deployment、Blu…

MySQL查询语句基础解析

一般查询&#xff1a; ## 直接查询 语法&#xff1a;select 字段 from 表名&#xff1b; 举例&#xff1a;select name, age from student; 解析&#xff1a;从 student 表中查询 name 与 age## 条件查询 语法&#xff1a;select 字段 from 表名 where 条件&#xff1b; 举例&…