字符串左旋问题及判断一个字符串是否由另一个字符串左旋得到

字符串左旋问题

问题描述

左旋字符串中的k个字符。例如 ABCD左旋一个字符得到BCDA ,ABCD左旋两个字符得到CDAB

解法一:暴力破解法

  • 先左旋一个字符

    • 将字符串首个字符保存在temp中

      • 字符串其余字符向左移动一个单位
      • 将temp中保存的字符放到字符串结尾
  • 重复上述操作k次

    img

    #include<stdio.h>
    #include<string.h>
    #include<assert.h>
    void move_left(char* arr, int k)
    {//指针指向非空assert(arr != NULL);int sz = strlen(arr);while (k > 0){char temp = *arr;for (int j = 0; j < sz-1; j++){*(arr + j) = *(arr + j + 1);}*(arr + sz - 1) = temp;k--;}
    }
    int main()
    {char  arr[] = "abcdef";int k = 3;move_left(arr, k);printf("%s", arr);
    }
    

解法二:三部翻转法

  • 找到切割位置k

  • 假设将字符串"abcde"左旋2个字符

  • 先将左边逆序得到“ba"

  • 再将右边逆序得到“edc”

  • 最后将整体逆序得到“cdeab"

    img

#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* low, char* high)
{assert(low != NULL);assert(high != NULL);while (low < high){char temp = *low;*low = *high;*high = temp;low++;high--;}
}
void move_left(char* arr, int k)
{//指针指向非空assert(arr != NULL);int sz = strlen(arr);assert(k <= sz);reverse(arr,arr+k-1);//左边逆序reverse(arr+k, arr +sz-1);//右边逆序reverse(arr, arr + sz - 1);//整体逆序
}
int main()
{char  arr[] = "abcdef";int k = 3;move_left(arr, k);printf("%s", arr);
}

补充扩展

判断一个字符串是否是由另一个字符串左旋得到

eg:str1=“abcdef”,

str2=“cdefab”,

str1是由str2左旋得到的

解法一:穷举法

将字符串2左旋k个字符与字符串1进行比较,使用strcmp函数如果相等则返回yes,反之返回no

#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* low, char* high)
{assert(low != NULL);assert(high != NULL);while (low < high){char temp = *low;*low = *high;*high = temp;low++;high--;}
}
void move_left(char* arr, int k)
{//指针指向非空assert(arr != NULL);int sz = strlen(arr);assert(k <= sz);reverse(arr, arr + k - 1);//左边逆序reverse(arr + k, arr + sz - 1);//右边逆序reverse(arr, arr + sz - 1);//整体逆序
}
int is_left_move(char* s1, char* s2)
{int sz = strlen(s1);for (int k = 0; k < sz ; k++){move_left(s2, 1);int ret=strcmp(s1, s2);if (ret == 0)return 1;}return 0;
}
int main()
{char  arr1[] = "abcdef";char arr2[] = "cdefjab";int ret=is_left_move(arr1, arr2);if(ret==1){printf("yes");}else{printf("no");}
}

解法二:判断子串法

  • 在字符串str1中追加一个字符串str1,得到“abcdefabcdef"

  • 判断str2(“cdefab”)是否为str1(“abcdefabcdef")的子串

    #define  _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
    #include<string.h>
    #include<assert.h>
    int  is_left_move(char* str1, char* str2)
    {int len1 = strlen(str1);int len2 = strlen(str2);if (len1 != len2){return 0;}strncat(str1,str1,len1);//在字符串str1后面追加字符串str1中len1个字符char* pstr=strstr(str1, str2);//判断str2是否为str1的子串,返回值为指针,指针指向str2在str1中的位置,若不是则返回空指针if (pstr != NULL){return 1;}else {return 0;}
    }int main()
    {char  arr1[30] = "abcdef";char arr2[] = "cdefab";int ret=is_left_move(arr1, arr2);if (ret == 1){printf("yes");}else{printf("no");}
    }

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

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

相关文章

MySql连接异常解决

这两天遇到一个mysql连接的问题&#xff0c;找人弄了好几天也没弄好&#xff0c;先看一下报错信息&#xff1a; org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.e…

js映射 nginx_浅析nginx刚刚发布的JavaScript能力nginScript

背景2015年9月&#xff0c;nginx宣布支持类JavaScript语言。这意味着开发者可以更轻松、自由的控制全球最优秀的HTTP及反向代理服务器&#xff0c;并在此之上可以衍生出更多有用、好玩的创意。Nginx也更开发的走向了动态配置化的下一个阶段。大家可以点击查看 官方介绍链接 。先…

浏览器是如何工作的系列:渲染引擎

渲染引擎的功能就是渲染&#xff0c;在浏览器上显示请求的内容。 默认情况下&#xff0c;渲染引擎可以显示HTML和XML文档和图像。他也可以显示其他类型的插件(浏览器扩展)。例如显示PDF使用PDF浏览器插件。 我们将用一个特殊的章节来讨论插件和扩展。在这个章节中&#xff0c;我…

洛杉矶手机资费9.9美元包打一年

“洛杉矶的油价比中国还便宜两块钱。我就想了&#xff0c;中石油、中石化这是怎么回事啊&#xff1f;能不能换我当老总&#xff0c;试半年&#xff0c;不行我再还给你&#xff1f;” 政府工作报告语言更平实 昨日&#xff0c;政协分组讨论政府工作报告&#xff0c;小崔第二个发…

软考信息系统监理师第五次作业

一、组织协调1、组织协调的基本原则是什么&#xff08;记&#xff09;&#xff1f;&#xff08;1&#xff09;公平、公正、独立原则&#xff08;2&#xff09;守法原则&#xff08;3&#xff09;诚信原则&#xff08;4&#xff09;科学原则2、什么是科学的原则&#xff1f;科学…

杨氏矩阵问题

杨氏矩阵问题 问题描述&#xff1a; 杨氏矩阵定义&#xff1a;同行元素从左向右依次递增&#xff0c;同列元素从上到下依次递增&#xff0c;注意&#xff1a;杨氏矩阵行列数可以不相等 杨氏矩阵举例&#xff1a; 123456789 在杨氏矩阵中查找一个元素key,要求时间复杂度小于O(…

win10水印烦死了_win10系统下word去水印的方法【图文】

很多win10系统用户都会从网上下载word文档来进行修改&#xff0c;而在下载的word文档中有时候会有水印&#xff0c;而有些用户并不知道要怎么去除word中水印&#xff0c;为此win7之家小编这就给大家带来win10系统下word去水印的方法吧。方法一、1、进入「设计」-「页面背景」-「…

python中如何对dict对象进行排序

有程序&#xff1a;mydict {carl:40,alan:2,bob:1,danny:3}for key in sorted(mydict.iterkeys()):print "%s: %s" % (key, mydict[key])输出结果为&#xff1a; alan: 2 bob: 1 carl: 40 danny: 3 使用key来进行dict的排序&#xff1a; keylist mydict.keys() key…

富丽的SUSE Linux 10.3(1)

作者: hr127 出自: http://www.linuxdiyf.com版权声明&#xff1a; 原创作品&#xff0c;容许转载&#xff0c;转载时请务必以超链接编制标明文章 原始出处 、作者信息和本声明。不然将追究执法责任。 转载于:https://www.cnblogs.com/zgqjymx/archive/2011/03/07/1976023.htm…

ios CGRec用法

/*rect(x,y,width,height);width&#xff0c; height正负代表了从原点的绘制方向,矩形的长宽都是取得绝对值*/// Do any additional setup after loading the view, typically from a nib.#pragma mark -------------------------------------------生成CGRect----------------…

怎么判断子元素距离父元素顶部位置_js获取元素的距离父元素、窗口的距离offsetTop,offsetHeight,clientHeight...

前言相信很多项目中都会有这样一个小需求(PC端&#xff0c;移动端则是点击)&#xff0c;鼠标移上某个菜单或者某个位置&#xff0c;显示一个弹出框&#xff0c;移开则隐藏弹出框&#xff0c;就是css中hover效果&#xff0c;这种通常做法是每个子菜单下都有一个弹框&#xff0c;…

matlab实现同态滤波

定义 一幅图像可看成由两部分组成&#xff0c;即 fi代表随空间位置不同的亮度&#xff08;Illumination&#xff09;分量&#xff0c;其特点是缓慢变化&#xff0c;集中在图像的低频部分。fr代表景物反射到人眼的反射&#xff08;Reflectance&#xff09;分量&#xff0c;其特…

WordPress Mail Subscribe List插件‘sml_name’参数HTML注入漏洞

漏洞名称&#xff1a;WordPress Mail Subscribe List插件‘sml_name’参数HTML注入漏洞CNNVD编号&#xff1a;CNNVD-201306-205发布时间&#xff1a;2013-06-14更新时间&#xff1a;2013-06-14危害等级&#xff1a; 漏洞类型&#xff1a;输入验证威胁类型&#xff1a;远程CVE编…

大摩维持浩大游戏“增持”评级

网易科技讯 3月3日动静&#xff0c;摩根士丹利往日宣布投资陈诉&#xff0c;指出浩大游戏第四季度业绩凌驾预期&#xff0c;具有多个利好要素&#xff0c;另外该公司在Mochi Media平台方面的极力也值得垂青。因此&#xff0c;摩根士丹利维持浩大游戏“增持”的评级。以下为陈诉…

数字图像处理频域滤波实现低通与高通滤波(包含matlab代码)

低通滤波器 理想低通滤波 作用&#xff1a;保留频谱图中圆内低频分量&#xff0c;截断频谱图中圆外高频分量函数表示&#xff1a; 假设频谱中心在 (M/2,N/2)处&#xff0c;则任意频谱成分(u,v) 到中心&#xff08;原点&#xff09;的距离D(u,v) 定义为&#xff1a; D0为低通滤…

api报错 javaee maven_JavaEE关于Maven的配置与学习

关于Maven的配置与学习1. 简介官方说法&#xff1a;Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a projects build, reporting and documentation from a central piece …

jQuery以Post方式发送请求并获取返回的文件供下载!

用ajax请求文件下载当然是可以的&#xff0c;不用有返回值&#xff0c;代码差不多是这样&#xff1a; try{string FileName ".//doc//[大家网]Beginning.ASP.NET.2.0.E-Commerce.in.C#.2005.From.Novice.to.Professional[www.TopSage.com].pdf";FileName ".//…

Direct3D的一些小贴士收藏(转载)

GPU性能调试&#xff1a; 通常来说&#xff0c;使用CPU时间事件来调试GPU是低效并且是不准确的。D3D API在多数命令下会阻塞&#xff0c;甚至是Draw函数。它会在一些时间片上做一些真正的工作&#xff0c;而这往往是不可预知的。因此&#xff0c;GPU的性能调试只能用PIX或者是其…

数字图像处理同态滤波(matlab)

定义 一幅图像可看成由两部分组成&#xff0c;即 fi代表随空间位置不同的亮度&#xff08;Illumination&#xff09;分量&#xff0c;其特点是缓慢变化&#xff0c;集中在图像的低频部分。fr代表景物反射到人眼的反射&#xff08;Reflectance&#xff09;分量&#xff0c;其特…

Java并发编程-ReentrantLock源码分析

一、前言 在分析了 AbstractQueuedSynchronier 源码后&#xff0c;接着分析ReentrantLock源码&#xff0c;其实在 AbstractQueuedSynchronizer 的分析中&#xff0c;已经提到过ReentrantLock&#xff0c;ReentrantLock表示下面具体分析ReentrantLock源码。 二、ReentrantLock数…