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

字符串左旋问题

问题描述

左旋字符串中的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,一经查实,立即删除!

相关文章

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

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

富丽的SUSE Linux 10.3(1)

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

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为低通滤…

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 ".//…

数字图像处理同态滤波(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数…

绿色vmware 安装后看不到虚拟的网卡

绿色vmware 安装后看不到虚拟的网卡&#xff0c;按下面方法就可以添加。 1. 到Vmware 安装目录&#xff0c;运行 vmnetcfg,运行后出现虚拟网络编辑器 2. 转到主机虚拟适配器&#xff0c;单击添加 3. 转到网络连接就可以看到新增的vmware 虚拟网卡 转载于:https://www.cnblogs.c…

C语言strtok函数的用法

strtok是字符串切割函数 定义 参数一&#xff1a;待切割字符串参数二&#xff1a;分隔符集合首次调用时传递参数为&#xff1a; strtok(str,seps);之后再次调用时传递参数为: strtok(NULL,seps);​ 若可以切割&#xff0c;函数返回值为字符指针&#xff0c;各段切割好的字符串…

51单片机C语言led流水灯及数码管实现秒表

51单片机C语言练习题 单片机型号 普中科技的 led练习题 led小灯闪烁 #include<reg52.h> sbit LED P0^0; void main() {unsigned int i0;while(1){LED 1;for(i0;i<60000;i);LED 0;for(i0;i<60000;i);} }led流水灯 #include<reg52.h>void main() {un…

内聚和耦合(自己的理解)

网上对于内聚和耦合的资料太多&#xff0c;这里结合我的感受和其他人的答案http://blog.csdn.net/zhiquan/article/details/4255161谈谈自己的理解 以下是我对内聚和耦合的理解&#xff08;例子来源于生活&#xff09;。 1.内聚&#xff1a; i.偶然内聚&#xff1a;如果一个模块…

(转)交换机攻击方法描述

利用交换机漏洞的攻击方法如下&#xff1a;一、生成树攻击生成树协议(STP)可以防止冗余的交换环境出现回路。要是网络有回路&#xff0c;就会变得拥塞不堪&#xff0c;从而出现广播风暴&#xff0c;引起MAC表不一致&#xff0c;最终使网络崩溃。使用STP的所有交换机都通过网桥协…

无用的设计模式之装饰者模式

为什么80%的码农都做不了架构师&#xff1f;>>> 前言 装饰者设计模式本来是很常用的模式&#xff0c;常用到随处可见&#xff0c;jdk的bio设计都是遵循这个模式的&#xff0c;偶然的机会发现&#xff0c;貌似jdk中bio的装饰者模式和设计模式中的装饰者设计模式却有…

转-HTC 手机生产日期,产地查询 以及 SN码 IMEI码 查询等问题汇总

问&#xff1a;什么是IMEI码&#xff1f;什么是SN码&#xff1f; 答&#xff1a;IMEI码&#xff0c;国际移动装备辨识码&#xff08;International Mobile Equipment Identity number&#xff0c;IMEI&#xff09;。SN码即Serial Number&#xff0c;产品序列号。 问&#xff1a…

C#生成带Logo二维码

1.下载ThoughtWorks.QRCode引用并添加在工程中 2.在实现类QRCodeEncoderDemo中引入Dll&#xff0c;添加方法 using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Drawing2D;using System.Linq;using System.Web;using ThoughtWorks.QRC…

51单片机实现三位十进制数加减乘除运算

51单片机实现三位十进制数加减乘除运算 一.题目 51单片机IO接口作业 请将附件给出的Proteus图用51单片机完成一个计算器功能。 1、显示采用动态分时8位共阳数码管输出。 2、采用4*4矩阵键盘输入&#xff0c;键盘上已经标识对应键。 3、完成三位十进制数的加、减、乘、除运…

未能加载文件或程序集“Microsoft.Office.Interop.Owc11, Version=11.0.0.0, ...”或它的某一个依赖项~[解决方案]...

配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 分析器错误信息: 未能加载文件或程序集“Microsoft.Office.Interop.Owc11, Version11.0.0.0, Cultureneutral, PublicKeyToken71e9bce111e9429c”或它的某一个…

方法javaJVM学习笔记-内存处理

本文是一篇关于方法java的帖子 大多数JVM将内存区域分离为Method Area&#xff08;Non-Heap&#xff09;&#xff0c;Heap&#xff0c;Program Counter Register&#xff0c;Java Method Statck&#xff0c;Native Method Stack和Direct Memomry&#xff08;备注&#xff1a;Di…