博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
翻转字符串和左旋转字符串
阅读量:4704 次
发布时间:2019-06-10

本文共 1632 字,大约阅读时间需要 5 分钟。

左旋转:

class Solution {public:    string LeftRotateString(string str, int n) {        int length = str.size();        if(length <= 1 || n <= 0)            return str;        reverse(str,0,length-1);        reverse(str,0,length-1-n);        reverse(str,length-n,length-1);        return str;    }    void reverse(string &str,int begin,int end){        for(int i = begin;i <= (begin + end)/2;i++)            swap(str[i],str[begin+end-i]);    }};

翻转:

class Solution {public:    string ReverseSentence(string str) {        int length = str.size();        if(length <= 0)            return str;        reverse(str,0,length-1);        vector
blank; int num = 0; for(int i = 0;i < length;i++){ if(str[i] == ' '){ blank.push_back(i); num++; } } int begin = 0; int end; for(int i = 0;i < num;i++){ end = blank[i] - 1; reverse(str,begin,end); begin = blank[i] + 1; } reverse(str,begin,length-1);//最后一个空白的部分实际上是没有翻转,这一步必须再进行翻转 return str; } void reverse(string &str,int begin,int end){ for(int i = begin;i <= (begin + end)/2;i++) swap(str[i],str[begin+end-i]); }};

左旋转在abcdefg,7的时候出问题

翻转字符串在输入例子为一个空格的字符串的时候出问题,即" "

两个出问题其实都是在reverse函数出的问题。reverse(str,0,length-1-n)这行代码相当于reverse(str,0,-1),但(begin + end)/2得到的结果不是-1,而是0。因为i是int型,-0.5的int型是0,而不是-1。

当字符串为一个空格的时候,reverse(str,begin,end)是reverse(str,0,-1)和左旋转是一样的问题。

这两个都会造成blank[i] - 1结果为-1,造成数组越界

int型对小数是取整的,1.7的int是1,不是2,-1.7的int是-1,不是-1。

 

reverse的正确写法:

 

转载于:https://www.cnblogs.com/ymjyqsx/p/8877326.html

你可能感兴趣的文章
【Java深入研究】8、Java中Unsafe类详解
查看>>
C#读取XML格式字符串
查看>>
浅谈JVM-图解类加载机制
查看>>
代理模式:利用JDK原生动态实现AOP
查看>>
Android—PopupWindow的简单使用
查看>>
如何在一个控件上同时实现单触和多触事件
查看>>
编码 - server.xml
查看>>
婚礼上的谎言
查看>>
java基础概念
查看>>
unrecognized selector sent to class ShareSDK集成
查看>>
POJ 3641 Pseudoprime numbers
查看>>
python作业
查看>>
Execl DataTime Format Number
查看>>
将代码上传版本库gitee
查看>>
表单多次提交
查看>>
无锁版以时间为GUID的方法
查看>>
ubuntu12.10安装source navigator
查看>>
算法题解
查看>>
linux服务器安全小知识
查看>>
[信息安全] 1.密码工具箱
查看>>