Nicn的刷题日常之字符串左旋(详细图解思路,多解法,建议三连收藏)

目录

1.题目描述 一

2.解题想法图解 

2.1直接解

 2.2巧解

3.题目描述二 

3.1.1思路1

 3.1.2 思路2

 4.结语


1.题目描述 一

实现现一个函数,可以左旋字符串中的k个字符。

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

2.解题想法图解 

2.1直接解

当我们要进行多次反转只用循环执行上述过程就行了 

我们来看一下解答代码:

void left_reverse(char* str, int k)
{int sz = strlen(str);while (k){char temp = *str;int i = 0;for (i = 0; i < sz - 1; i++){*(str+i) = *(str +i+ 1);}*(str + sz - 1) = temp;k--;}}
int main()
{char arr[] = "ABCD";int k = 0;printf("请输入要旋转的次数:\n");scanf("%d", &k);left_reverse(arr, k);printf("%s\n", arr);return 0;
}

 2.2巧解

根据上图,我们不难总结出这样的规律:

字符串左旋一次的结果就是将字符串第一个字符进行翻转然后剩余的字符在进行逆序,最后整体逆序

字符串左旋两次的结果就是将字符串前两个字符进行逆序,然剩下的字符串再逆序,最后整体逆序就可以得到。 

我们来看一下实现代码;

void reverse(char* left, char* right)
{assert(left && right);//涉及到解引用断言一下while (left < right){char temp = *left;*left = *right;*right = temp;left++;right--;}
}
void left_reverse(char* str, int k)
{int len = strlen(str);//为了实现逆序//先实现左边逆序reverse(str, str + k - 1);//右边逆序reverse(str + k, str + len - 1);//整体逆序reverse(str, str + len - 1);
}int main()
{char arr[] = "ABCD";int k = 0;printf("请输入要旋转的次数:\n");scanf("%d", &k);left_reverse(arr, k);printf("%s\n", arr);return 0;
}

 

3.题目描述二 

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

例如:给定s1 =AABCD和s2 = BCDAA,返回1

给定s1=abcd和s2=ACBD,返回0.

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

3.1.1思路1

我们直接将其中一个字符串进行左旋,每次旋转后都与宁外一个字符串进行比较,看是否相等。我们旋转的次数选择应该和我们选择进行左旋的字符串的长度相等,因为要保证每一次的左旋结果都没有漏掉。

int is_left_move(char* str1, char* str2)
{int sz = strlen(str1);int k = sz-1;while (k){char temp = *str1;int i = 0;for (i = 0; i < sz - 1; i++){*(str1+i) = *(str1 +i+ 1);}*(str1 + sz - 1) = temp;if (strcmp(str1, str2) == 0)return 1;k--;}return 0;
}int main()
{char arr1[] = "abcdef";char arr2[] = "cdefab";int ret = is_left_move(arr1, arr2);if (ret == 1){printf("YES\n");}else{printf("NO\n");}return 0;
}

 

 3.1.2 思路2

看一下代码实现:

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);if (strstr(str1, str2) == NULL)return 0;elsereturn 1;
}int main()
{char arr1[] = "abcdef";char arr2[] = "cdefab";int ret = is_left_move(arr1, arr2);if (ret == 1){printf("YES\n");}else{printf("NO\n");}return 0;
}

 

 4.结语

以上就是本期的所有内容,知识含量蛮多,大家可以配合解释和原码运行理解。创作不易,大家如果觉得还可以的话,欢迎大家三连,有问题的地方欢迎大家指正,一起交流学习,一起成长,我是Nicn,正在c++方向前行的奋斗者,感谢大家的关注与喜欢。

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

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

相关文章

【QT+QGIS跨平台编译】之二十四:【GeoTIFF+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、GeoTIFF介绍二、文件下载三、文件分析四、pro文件五、编译实践一、GeoTIFF介绍 GeoTIFF是一种常用的地理信息系统(GIS)文件格式,其采用标签结构将栅格地理空间数据以及相关的元数据存储在一个单一的文件中。它是基于标准的TIFF(Tagged Image File Format)格…

使用wda框架实现IOS自动化测试详解

目录 1、weditor元素定位工具 1.1、weditor的安装和使用 2、wda iOS自动化框架 2.1、wda概述 2.2、wda安装 2.3、wda的使用 2.3.1、全局配置 2.3.2、创建客户端 2.3.3、APP相关操作 1、启动APP 2、关闭APP 3、获取APP状态信息 4、获取当前APP的运行信息 2.3.4、设…

【leetcode题解C++】98.验证二叉搜索树 and 701.二叉搜索树中的插入操作

98. 验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例…

ubuntu22.04@laptop OpenCV安装

ubuntu22.04laptop OpenCV安装 1. 源由2. 验证环境3. OpenCV安装3.1 系统升级3.2 Python安装3.3 OpenCV C/C环境安装3.4 OpenCV Python虚拟环境安装3.5 OpenCV检查 4. 总结5. 参考资料6. 补充 - python环境 1. 源由 最近&#xff0c;打算在Companion Computer上一些目标识别的…

PyQtWebEngine模块,PyQt5用于处理网页渲染和浏览器功能

一、简介 PyQtWebEngine 是 PyQt5 框架的一个模块&#xff0c;用于在 PyQt5 应用程序中嵌入 Web 引擎功能。它基于 Qt WebEngine 技术&#xff0c;提供了与 Web 内容交互的功能&#xff0c;包括显示网页、执行 JavaScript、处理网络请求等。 以下是 PyQtWebEngine 的一些特点和…

MYSQL——MySQL8.3无法启动

在新电脑上装了个MySQL&#xff0c;但是无法使用net start mysql启动&#xff0c;很是纳闷&#xff0c;使用mysqld --console去查看报错&#xff0c;也是没报错的&#xff0c;但是奇怪的是&#xff0c;我输入完这个mysqld --console之后&#xff0c;就等于启动了mysql了&#x…

[python]基于opencv实现的车道线检测

【检测原理】 一、首先进行canny边缘检测&#xff0c;为获取车道线边缘做准备 二、进行ROI提取获取确切的车道线边缘&#xff08;红色线内部&#xff09; 三、利用概率霍夫变换获取直线&#xff0c;并将斜率正数和复数的线段给分割开来 四、离群值过滤&#xff0c;剔除斜率…

大数据平台-可视化面板介绍-Echarts

应对现在数据可视化的趋势&#xff0c;越来越多企业需要在很多场景(营销数据&#xff0c;生产数据&#xff0c;用户数据)下使用&#xff0c;可视化图表来展示体现数据&#xff0c;让数据更加直观&#xff0c;数据特点更加突出。 目录 01-使用技术 02- 案例适配方案 03-基础…

【大厂AI课学习笔记】1.4 算法的进步(4)关于李飞飞团队的ImageNet

第一个图像数据库是ImageNet&#xff0c;由斯坦福大学的计算机科学家李飞飞推出。ImageNet是一个大型的可视化数据库&#xff0c;旨在推动计算机视觉领域的研究。这个数据库包含了数以百万计的手工标记的图像&#xff0c;涵盖了数千个不同的类别。 基于ImageNet数据库&#xf…

编译Faiss-gpu【InterMKL】C++ 按步骤操作 基本不会有问题的 python原理相同。

编译Faiss-gpu C++ 基本介绍 使用Faiss版本【1.7.4】 该项目依赖于BLAS 组件 OpenBLAS 和 IntelMKL BLAS 【官方支持】 IntelMKL 会比 OpenBLAS 快的多。 【来自官方结论】 本机环境 Cuda :11.1 Cuda-Driver: 515 InterMKL: 2021.2.0 Faiss :1.7.4 注意:faiss仅…

podman详解

Podman 是一个开源项目&#xff0c;用于开发、管理和运行容器和容器镜像。它与 Docker 非常相似&#xff0c;但有一些关键的不同之处。 Podman 的主要特点包括&#xff1a; 无守护进程&#xff1a;不同于 Docker&#xff0c;Podman 不需要运行一个永久的守护进程。这使得 Podm…

Android之命令行烧写OTA镜像(一百八十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【Leetcode】1690. 石子游戏 VII

文章目录 题目思路代码结果 题目 题目链接 石子游戏中&#xff0c;爱丽丝和鲍勃轮流进行自己的回合&#xff0c;爱丽丝先开始 。 有 n 块石子排成一排。每个玩家的回合中&#xff0c;可以从行中 移除 最左边的石头或最右边的石头&#xff0c;并获得与该行中剩余石头值之 和 相…

Spark context stopped while waiting for backend

目录 报错信息 解决办法 解释 报错信息 Spark context stopped while waiting for backend 翻译过来就是 &#xff1a;Spark上下文在等待后端时停止 解决办法 通过在yarn-site.xml中添加如下配置项&#xff0c;并重启yarn&#xff0c;程序在 “–driver-memory 600m --e…

Vue基础知识七

一 路由 1.1 生活里的路由与路由器 是为了实现多台设备上网 1.2 程序里的路由与路由器 是为了实现导航区与展示区来回切换&#xff1b; SPA单页面应用&#xff1a;就像前几章节里的项目&#xff0c;整个项目只有一个html文件&#xff1b; 案例 注意&#xff0c;最开始的时候…

嵌入式学习 Day18

Linux软件编程: 1.Linux: 操作系统的内核 1.管理CPU 2.管理内存 3.管理硬件设备 4.管理文件系统 5.任务调度 2.Shell&#xff1a; 1.保护Linux内核(用户和Linux内核不直接操作,通过操作Shell,Shell和内核交互) 2.命令解释器 3…

STM32--SPI通信协议(2)W25Q64简介

一、W25Q64简介 1、W25Qxx中的xx是不同的数字&#xff0c;表示了这个芯片不同的存储容量&#xff1b; 2、存储器分为易失性与非易失性&#xff0c;主要区别是存储的数据是否是掉电不丢失&#xff1a; 易失性存储器&#xff1a;SRAM、DRAM&#xff1b; 非易失性存储器&#xff…

用linux文件系统的链接功能实现文件缓存LRU

概述: 目前,随着家庭宽带网络、无线宽带技术,以及终端设备性能的不断发展,基于多媒体的应用越来越广泛,特别是互联网视频的应用更是成为推动这些技术发展的源动力。作为互联网视频VOD的应用,提高视频播放的流畅度是一个非常重要的指标之一。除了编解码技术,视频C…

编程笔记 html5cssjs 077 Javascript 关键字

编程笔记 html5&css&js 077 Javascript 关键字 一、关键字二、Javascript关键字注意 在计算机编程语言中&#xff0c;关键字&#xff08;Keyword&#xff09;是指那些被编程语言赋予特殊含义、具有预定义用途的保留字。这些词汇不能用作变量名、函数名或其他标识符&…

红队渗透靶机:LORD OF THE ROOT: 1.0.1

目录 信息收集 1、arp 2、nmap 3、knock 4、nikto 目录探测 1、gobuster 2、dirsearch WEB sqlmap 爆库 爆表 爆列 爆字段 hydra爆破 ssh登录 提权 信息收集 内核提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, ty…