《剑指offer》--字符串左旋

简介: 《剑指offer》--字符串左旋

字符串左旋的三种方法


1. 一个一个字符挪

代码实现如下:

#include <stdio.h>
#include <string.h>
void Left_Reverse(char* str,int k)
{
  int len = strlen(str);//6
  int time = 0;
  time = k % len;//真正要旋转的次数
  int i = 0;
  for (i = 0; i < time; i++)
  {
    int j = 0;
    char tmp = str[0];
    for (j = 0; j < len - 1; j++)
    {
      str[j] = str[j + 1];
    }
    str[j] = tmp;
  }
}
int main()
{
  char str[30] = "abcdef";
  int k = 3;//要旋转几个字符
  Left_Reverse(str,k);
  printf("%s\n", str);
  return 0;
}

画图说明:

这是循环执行一次的过程。上述代码中还要注意的是time=k%len.例如当k=7时,我们要旋转7次,但是当旋转第6次时字符串变回原样了,这就相当于还需旋转一次即可,k%len=1。

2. 库函数—strcpy和strncat

代码实现如下:

#include <stdio.h>
#include <string.h>
int main()
{
  char str[30] = "abcdef";
  int k = 2;
  int len = strlen(str);
  int time = k % len;
  char tmp[256] = { 0 };
  //把cdef拷贝进tmp数组中
  strcpy(tmp, str + time);
  //把str中的前两个字符追加到tmp中,此时tmp中是cdefab
  strncat(tmp, str, time);
  //最后把tmp拷贝回str中
  strcpy(str, tmp);
  printf("%s\n", str);
  return 0;
}

画图演示:

这种方法是比较简便的,我们要了解strcpy和strncat函数的使用。

3. 三段逆置法

代码实现如下:

#include <stdio.h>
#include <string.h>
//实现字符串左右端字符的交换
void Reverse(char* str, int left, int right)
{
  while (left < right)
  {
    char tmp =str[left];
    str[left] = str[right];
    str[right] = tmp;
    left++;
    right--;
  }
}
void Left_Round(char* str, int k)
{
  int len = strlen(str);
  int time = k % len;
    //三段逆置
  Reverse(str, 0,time - 1);
  Reverse(str, time,len-1);
  Reverse(str, 0,len - 1);
}
int main()
{
  char str[30] = "abcdef";
  int k = 3;
  Left_Round(str, k);
  printf("%s\n", str);
  return 0;
}

画图演示:

这里我们需要注意,我们定义的left和right是下标,在Reverse函数中我们也是对str的下标进行操作。

目录
相关文章
|
缓存 网络协议 网络架构
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
549 1
|
前端开发 JavaScript
Echarts堆叠折线图ajax获取数据展示
Echarts堆叠折线图ajax获取数据展示
181 0
|
IDE 开发工具 Windows
QT应用编程: windows下QT调用COM组件
QT应用编程: windows下QT调用COM组件
1175 0
QT应用编程: windows下QT调用COM组件
|
DataWorks 数据可视化 前端开发
《阿里云飞天大数据平台 DataWorks 前端技术解密:工作流调度可视化》(脱敏版本)
## ![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2021/png/13481/1614773723538-e8d99a86-b04d-47bb-86ad-90cdb07ac657.png#height=220&id=QQWI7&margin=%5Bobject%20Object%5D&name=image.png&or
1070 0
|
9月前
|
人工智能 测试技术
Ola:清华联合腾讯等推出的全模态语言模型!实现对文本、图像、视频和音频的全面理解
Ola 是由清华大学、腾讯 Hunyuan 研究团队和新加坡国立大学 S-Lab 合作开发的全模态语言模型,支持文本、图像、视频和音频输入,并具备实时流式解码功能。
565 16
基于CSS3 SVG实现带表情的投票打分源码
投票打分插件是基于CSS3和SVG的,它的特点是对于不同的评级会有不同的表情,比如1星是失落的表情,5分是帅酷的表情
118 3
|
机器学习/深度学习 算法 数据可视化
如何在机器学习中检测异常值
如何在机器学习中检测异常值
381 2
|
机器学习/深度学习 算法 Python
【绝技揭秘】Andrew Ng 机器学习课程第十周:解锁梯度下降的神秘力量,带你飞速征服数据山峰!
【8月更文挑战第16天】Andrew Ng 的机器学习课程是学习该领域的经典资源。第十周聚焦于优化梯度下降算法以提升效率。课程涵盖不同类型的梯度下降(批量、随机及小批量)及其应用场景,介绍如何选择合适的批量大小和学习率调整策略。还介绍了动量法、RMSProp 和 Adam 优化器等高级技巧,这些方法能有效加速收敛并改善模型性能。通过实践案例展示如何使用 Python 和 NumPy 实现小批量梯度下降。
173 1
|
存储 弹性计算 NoSQL
阿里云服务器企业级实例购买及变配常见问题及解答
阿里云服务器企业级实例具有高性能、稳定计算能力和平衡网络性能的特点,因为具有独享且稳定的计算、存储、网络资源,这些实例规格族非常适合对业务稳定性具有高要求的企业场景。企业级云服务器拥有完全的云服务器cpu、内存使用资源,不与他人共享云服务器资源。有些新手用户不知道什么是企业级实例与共享型实例有何区别,在使用过程中需要注意些什么,下面是小编整理的几个阿里云企业级云服务器实例常见问题及解答,以供大家了解。
阿里云服务器企业级实例购买及变配常见问题及解答
编程笔记 html5&css&js 007 HTML文本:段落和格式
编程笔记 html5&css&js 007 HTML文本:段落和格式
144 1