字符串移动

简介: 题目要求,就是把字符串循环移位,这个是比较常见的面试题了,要时间复杂度O(n),空间复杂度O(1)。         这个题是比较常见的面试题了,《编程珠玑》上有,应该还有不少书上也有。

题目要求,就是把字符串循环移位,这个是比较常见的面试题了,要时间复杂度O(n),空间复杂度O(1)。

        这个题是比较常见的面试题了,《编程珠玑》上有,应该还有不少书上也有。

        比如把字符串abcdefgh右循环移位4位,就编程了efghabcd。

       我们可以考虑如下3个步骤:

       先把abcd翻转变为dcba,再把efgh翻转变为hgfe。这样,原来的串变为了dcbahgfe 最后把整个儿翻转变为 efghabcd。

      我们用到的操作只是翻转。于是只需要实现对一个串翻转的函数就好了。

         

[cpp]  view plain copy
  1. void reverse(char *s,int from,int to) {  
  2.     int i,j;  
  3.         for (i = from, j = to; i < j; ++i, --j)  {  
  4.             char t = s[i];  
  5.                     s[i] = s[j];  
  6.                     s[j] = t;  
  7.         }  
  8. }     


        另外还要注意如果循环移动k位的话,相当于循环右移k % n 位,否则k很大的话就不是O(n)时间复杂度了。接下来我们所要做的就是控制好下标,实现3次翻转:     

[cpp]  view plain copy
  1. void shiftRight(char *s,int n,int k) {  
  2.     if (k %= n) {  
  3.         reverse(s, 0, k - 1);  
  4.         reverse(s, k, n - 1);  
  5.         reverse(s, 0, n - 1);  
  6.     }  
  7. }  
目录
相关文章
|
2月前
|
Cloud Native API 开发者
Gemini 2.5 Flash 技术拆解:从 MoE 架构到阿里云生态落地指南
2025年9月,谷歌Gemini 2.5 Flash发布,性能提升5%、成本降24%,引发行业关注。其MoE架构、百万上下文与“思考”范式,助力阿里云开发者高效构建云原生应用。本文解析技术内核,结合汽车、物流等案例,提供落地指南与避坑建议,展望大模型与流计算融合前景。
384 6
|
Linux 开发工具
蓝易云 - 在CentOS7/RHEL7上安装OpenSSL1.1.x教程
以上就是在CentOS7/RHEL7上安装OpenSSL 1.1.x的步骤。希望对你有所帮助。
844 0
|
消息中间件 存储 Java
Kafka 详解:全面解析分布式流处理平台
Kafka 详解:全面解析分布式流处理平台
871 0
|
机器学习/深度学习 传感器 算法
【随机分形搜索算法】一种新的全局数值优化的适应度-距离平衡随机分形搜索算法FDB-SFS附matlab代码
【随机分形搜索算法】一种新的全局数值优化的适应度-距离平衡随机分形搜索算法FDB-SFS附matlab代码
|
关系型数据库 MySQL 数据安全/隐私保护
一文极速解决Navicat或者MySQL报错:1045-Access denied for user root@localhost(using password:YES)
一文极速解决Navicat或者MySQL报错:1045-Access denied for user root@localhost(using password:YES)
2072 0
实战:第二十六章:Idea启动项目报错解决方案
实战:第二十六章:Idea启动项目报错解决方案
621 0
|
Dart 监控 Java
Flutter和原生代码的通信
我们只用Flutter实现了一个页面,现有的大量逻辑都是用Java实现,在运行时会有许多场景必须使用原生应用中的逻辑和功能,例如网络请求
Flutter和原生代码的通信
|
存储 Kubernetes Cloud Native
持久化存储PV与PVC
持久化存储PV与PVC
550 0
|
数据可视化 程序员 开发工具
Android studio配置git及使用方法
Android studio配置git及使用方法
|
弹性计算 数据安全/隐私保护
阿里云无影云桌面连接登录新手教程(用户名密码获取方法)
阿里云无影云桌面用户名和密码在哪查看?连接登录全流程
4941 1
阿里云无影云桌面连接登录新手教程(用户名密码获取方法)