如何用简单的方法来判断一个字符串是否是由另一个字符串旋转得来的

简介: 如何用简单的方法来判断一个字符串是否是由另一个字符串旋转得来的

写这篇文章的原因


今天在刷题的过程中遇到了一个题就是:判断一个字符串是否是由另一个字符串旋转得来的呢?我呢,一开始的思路是:将一个字符串的所有旋转结果都给写出来,然后再一个一个来判断。这样听起来是不是就特别麻烦,告诉你这不只是麻烦而且还容易出错,就拿我写的代码说吧。

void ReverseStr(char* str1,int m, int n)
{
  char* left = str1 + m;
  char* right = str1 + n;
  while (left <= right)
  {
    char tmp = *left;
    *left = *right;
    *right = tmp;
    left++;
    right--;
  }
}
int IsReverseStr(char* str1, char* str2, void (*p)(char* str1, int m, int n))
{
  int len = strlen(str1);
  char start[6] = "0";
  strncpy(start, str1,5);
  for (int i = 0; i < len; i++)
  {
    ReverseStr(str1, 0,i);
    ReverseStr(str1, i+1,len-1);
    ReverseStr(str1, 0,len-1);
    if (0 == strcmp(str1, str2))
      return 1;
  }
  return 0;
}
int main()
{
  char arr1[] = "AABCD";
  char arr2[] = "BCDAA";
  int ret = IsReverseStr(arr1, arr2,ReverseStr);
  printf("%d", ret);
  return 0;
}

有没有看出问题

25.png


对了,就是当我进行了一次字符串旋转的时候,原来的字符串里面内容的顺序也就被打乱了,我们再进行下一次操作的时候就不能得到我们想要的结果了,就是因为这个困扰了我大半天,我不断地调试修改最终以我当前的知识储备,还是没能将功能给实现,所以我就请教了老师,我一看代码我都懵了,为啥就这几行代码就能将我的几十行代码给替换,代码少不说,功能也实现了,而且逻辑也不复杂,比起我自己写的代码可好太多了。所以这里呢我想给大家分享分享我的经历,希望能告诉大家要提增强自己的逻辑能力,多刷题,多看看别人的代码是怎样写的。


代码实现


下面就是那几行打败我的代码

int findRound(const char * src, char * find)
{
  char tmp[256] = { 0 }; //用一个辅助空间将原字符串做成两倍原字符串
  strcpy(tmp, src); //先拷贝一遍
  strcat(tmp, src); //再连接一遍
  return strstr(tmp, find) != NULL; //看看找不找得到
}

看着是不是很不可思议,是不是觉得我之前写的代码太冗余了?大家可千万别学我这样,既浪费了时间,还没有达到目的。祝大家在以后的计算机生涯中越走越顺,谢谢大家。

相关文章
|
弹性计算 负载均衡 容灾
slb配置后端服务器组
配置阿里云SLB后端服务器组涉及四个主要步骤:创建服务器组、添加ECS实例、关联监听规则和设定负载均衡策略。这使得流量根据业务需求和服务器特性进行转发,便于应用架构的灵活管理和扩展,支持蓝绿部署、灰度发布,并通过多可用区提升系统可用性和容灾能力。
380 3
|
iOS开发 UED
Flutter 动态修改应用图标功能指南
探索Flutter中动态应用图标的实现方法,了解如何为用户提供独特体验,促进用户升级和应用内购买。
527 0
Flutter 动态修改应用图标功能指南
|
存储 网络协议 定位技术
高德地图开放平台IP地位接口使用说明
高德地图开放平台IP地位接口使用说明
2575 0
|
7月前
|
存储 自然语言处理 前端开发
2025年大模型发展脉络:深入分析与技术细节
本文深入剖析2025年大模型发展脉络,涵盖裸模型与手工指令工程、向量检索、文本处理与知识图谱构建、自动化提示生成、ReAct多步推理及AI Agent崛起六大模块。从技术细节到未来趋势,结合最新进展探讨核心算法、工具栈与挑战,强调模块化、自动化、多模态等关键方向,同时指出计算资源、数据质量和安全伦理等问题。适合关注大模型前沿动态的技术从业者与研究者。
2591 9
|
8月前
|
API 开发者
鸿蒙开发:V2版本装饰器之@Monitor装饰器
如果要实现@Monitor监听,其变量一定要被@Local、@Param、@Provider、@Consumer、@Computed装饰,未被修饰则无法被监听,还有,如果监听对象的变化,则不建议在一个类中对同一个属性进行多次@Monitor的监听,多次监听,只有最后一个定义的监听方法才会有效。
197 2
|
9月前
|
图形学
unity判断鼠标在不在UI上
在 Unity 中,判断鼠标是否在 UI 上主要依赖事件系统和射线检测机制。Unity 的事件系统负责处理输入事件,GraphicRaycaster 组件用于检测射线与 UI 元素的相交情况。通过 `EventSystem.current.IsPointerOverGameObject()` 方法可轻松判断鼠标是否在 UI 上。对于移动端,使用 `EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)` 来判断触摸是否在 UI 上。代码实现简单且高效。
|
算法 数据中心
数据结构之数据中心网络路由(BFS)
本文介绍了数据中心网络路由中使用广度优先搜索(BFS)算法的重要性及其应用。随着数据中心从集中式大型机系统发展到分布式架构,高效的数据路由成为确保低延迟、高吞吐量和网络可靠性的关键。BFS通过系统地探索网络层次,从源节点开始向外遍历,确保发现最短路径,特别适合于数据中心网络环境。文中还提供了BFS算法的具体实现代码,展示了如何在数据中心网络中应用该算法来查找节点间的最短路径,并讨论了BFS的优缺点。
323 0
数据结构之数据中心网络路由(BFS)
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
354 11
|
安全 Linux 程序员
一招解决开发环境问题——远程容器开发指南
使用C++作为主要开发语言的程序猿们应该会认同搭建开发环境是一件烦人的事情。笔者在运营iLogtail开源社区的过程中发现开发和调试环境问题也是成员问的最多的问题之一。利用 VSCode 的 Remote-Development 插件可以使整个开发环境运行在远程容器中,利用容器技术做到一致、可移植、天然隔离的环境开发编译。本文由浅到深带大家搭建这样的远端容器开发环境。
|
Linux C语言
suse linux 11 安装GCC开发环境
suse linux 11 安装GCC开发环境
288 0