题目:定义字符串的左旋转操作,把字符串前面的若干个字符移动到字符串的尾部

解:

1.最笨的一种方法就是,每次将字符串左移1个位置,然后把最左边的字符放到最后,这样移动满次数就行,假设字符串长度是n,要移动前面m个字符(m<=n)那么,时间=O(m*n)

2.编程珠玑上的题目,把n长字符串分为m n-m,记m长子串为A,n-m长子串为B,则字符串可表示为AB,移动之后的字符串=BA,首先求A的转置A(t)(即字符串逆置),B的转置B(t)

然后求A(t)B(t)的转置,(A(t) B(t))(t)=(B(t))(t) (A(t))(t)=BA

代码

#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>using namespace std;/*第一种这个时间是O(kn),空间是O(1)*/void leftreverse(string& str,int k)
{int i=0;while(i<k){char temp=str[0];int j;for(j=1;j<str.size();j++)str[j-1]=str[j];str[j-1]=temp;i++;}
}/*第二种根据XY的转置求*///逆转字符串
void reverse(char* begin,char* end)
{if(begin!=NULL && end!=NULL){while(begin<end){char temp=*begin;*begin=*end;*end=temp;begin++;end--;}}
}void leftreverse2(char* str,int k)
{if(str){int length=static_cast<int>(strlen(str));if(length>0 && k>0 && k<length){char* firststart=str;char* firstend=str+k-1;char* secondstart=str+k;char* secondend=str+length-1;reverse(firststart,firstend);reverse(secondstart,secondend);reverse(firststart,secondend);}}
}#define MAX 100
int main(void)
{char str[MAX];int k;cin>>str;cin>>k;leftreverse2(str,k);cout<<str<<endl;return 0;
}

转载于:https://www.cnblogs.com/buxianghe/p/3262355.html

26. 左旋转字符串相关推荐

  1. 微软算法100题26 左旋转字符串

    26.左旋转字符串 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef 左旋转2 位得到字符串cdefab.请实现字符串左旋转的函数. 要求时间对长度 ...

  2. 【编程题目】左旋转字符串 ☆

    26.左旋转字符串(字符串) 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串 abcdef 左旋转 2 位得到字符串 cdefab.请实现字符串左旋转的函数. ...

  3. 程序员编程艺术(算法卷):第一章、左旋转字符串

    第一章.左旋转字符串 作者:July,yansha. 时间:二零一一年四月十四日. 说明:(狂想曲,有三层意思:1.思绪纷飞,行文杂乱无章,想到什么,记下什么.2.简单问题深入化,复杂问题精细化,不惧 ...

  4. 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串

    反转单词顺序以及左旋转字符串:输入一个英文句子,翻转句子中的单词顺序,单词内部的字母顺序是不变的 – I am a student. -> student. am I 第一步,翻转句子中的所有字 ...

  5. 《剑指offer》-- 和为S的连续整数序列、和为S的两个数字、左旋转字符串、翻转单词顺序列

    一.和为S的连续整数序列: 1.题目: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100 ...

  6. 题目1362:左旋转字符串(Move!Move!!Move!!!)

    题目1362:左旋转字符串(Move!Move!!Move!!!) 时间限制:2 秒 内存限制:32 兆 特殊判题:否 提交:2306 解决:961 题目描述: 汇编语言中有一种移位指令叫做循环左移( ...

  7. 剑指offer之左旋转字符串

    1 题目 字符串的左旋转操作是把字符串前面的若干字符转移到字符串尾部,比如字符串abcdef和数字2,函数返回左旋转得到的结果是cdefgab 2 思路 先反转字符串所有,通过数字n找到的边界 ,然后 ...

  8. [剑指offer]面试题42:翻转单词顺序 VS左旋转字符串

    面试题42:翻转单词顺序 VS左旋转字符串 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...

  9. [剑指offer]面试题第[58-2]题[JAVA][左旋转字符串][拼接]

    [问题描述][中等] [解答思路] 1. 字符串切片 应用字符串切片函数,可方便实现左旋转字符串. 时间复杂度:O(N) 空间复杂度:O(N) public String reverseLeftWor ...

最新文章

  1. php判断邮箱是否合法性,php验证邮箱地址合法性
  2. SVM入门(八)松弛变量
  3. mac玩rust用什么画质_Mac上的活动监视器到底有什么用?你会用么?
  4. Oracle 12c 能否在2小时内完成一张14亿条记录的表结构字段类型变更
  5. OpenShift 4 之 GitOps(2)用ArgoCD部署应用
  6. 全局变量的使用【C++/Qt】
  7. TCP/IP协议的三次握手及实现原理
  8. java规范 控制语句
  9. Linux下安装和卸载jdk步骤详述
  10. PS长阴影生成工具 Long_Shadow_Generator_v1.2_for_CS6.zxp
  11. Python判断一个数是否为质数
  12. 计算机控屏教程,电脑怎么控制手机操作
  13. 计算机网络中NTFS概念及功能,什么是NTFS
  14. 哪类人适合学软件测试?零基础能学测试吗?
  15. 萌娃人脸生成器 实践踩坑笔记
  16. 雷电2接口_雷电3和TYPE-C都是干什么的?一文读懂全部
  17. 笔记本拆c面_继续拆解 C面下方还藏有玄机_神舟 战神GX8 PRO_笔记本评测-中关村在线...
  18. 卷积神经网络(CNN)(下)
  19. 单片机:按键控制两位数码管
  20. HVGA是320×480,WVGA800×480

热门文章

  1. 游三圣乡山中湖岛有感
  2. 【Python3网络爬虫开发实战】4-解析库的使用-3 使用pyquery
  3. 字符驱动之按键(四:poll机制)
  4. 4.8-全栈Java笔记:包机制
  5. python基本语句及其意思_Python语法基础(1),一
  6. 濮阳第二届创客机器人比赛_咸阳市举行第二届机器人大赛暨第一届创客大赛
  7. 抓包软件:Charles
  8. 年轻人的第一篇V语言笔记
  9. MATLAB调用C/C++函数的方法
  10. UIView转UIimage