zoukankan      html  css  js  c++  java
  • 翻转字符串和左旋转字符串

    左旋转:

    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<int> 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的正确写法:

  • 相关阅读:
    线性DP SGU167 I-country
    背包问题 POJ1742 Coins
    背包问题 codevs2210 数字组合
    dfs+贪心 BZOJ4027 [HEOI2015] 兔子与樱花
    spfa最短路+DP BZOJ1003 [ZJOI2006] 物流运输
    矩阵乘法 POJ3070 Fibonacci
    tarjan+spfa最短路 BZOJ1179 [Apio2009] Atm
    欧拉函数 BZOJ2190 [SDOI2008] 仪仗队
    矩阵乘法 洛谷 P3390【模板】矩阵快速幂
    裴蜀定理 BZOJ2299[HAOI2011] 向量
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/8877326.html
Copyright © 2011-2022 走看看