• leetcode-344-Reverse String


    题目描述:

    Write a function that takes a string as input and returns the string reversed.

    Example:
    Given s = "hello", return "olleh".

     

    要完成的函数:

    string reverseString(string s) 

     

    说明:

    1、这道题目十分容易,反转字符串。就算不使用c++的内置函数来反转或者来交换字母,我们也可以自己写出来如下代码:

        string reverseString(string s) 
        {
            int i=0,j=s.size()-1;
            char c;
            while(i<j)
            {
                c=s[j];
                s[j]=s[i];
                s[i]=c;
                i++;
                j--;
            }
            return s;
        }

    实测10ms,beats 97.83% of cpp submissions。

    2、这道题有个坑,就是字符串可能会很长。内存容纳一个很长的字符串没有问题,但是如果定义了一个新的字符串,把读取出来的字母逆序存放在新字符串上面,这样做就会超过memory limit。

    也就是这道题有空间复杂度的要求。以后能少用点空间还是少用点吧,直接在原有字符串上处理。

    3、分享两种使用c++内置函数的做法,给大家观赏一下。

    //方法一,使用reverse函数直接反转
        string reverseString(string s) 
        {
            reverse(s.begin(),s.end());
            return s;
        }
    //方法二,使用swap函数交换两个字母
        string reverseString(string s) 
        {
            int i=0;
            int j=s.size()-1;
            while(i<j)
                swap(s[i++],s[j--]);
            return s;
        }

    上述两种代码跟1中代码,实测都是10ms,beats 97.83% of cpp submissions。

    4、这道题看到有人使用了异或的方法去交换。异或方法如下:

    a=a^b

    b=a^b

    a=a^b

    这种做法其实从计算机组成的角度来看,需要读取3次a,读取3次b,异或运算3次,然后写入3次。

    而如果使用直接交换的方法,如下:

    c=a

    a=b

    b=c

    只需要读取1次a,读取1次b,读取1次c,写入1次c,写入1次a,写入1次b。总共读取3次,写入3次,还不用做运算。比起异或运算,其实会更快。

    在leetcode上写了个异或的代码如下:

        string reverseString(string s) 
        {
            int i=0,j=s.size()-1;
            while(i<j)
            {
                s[j]=s[j]^s[i];
                s[i]=s[j]^s[i];
                s[j]=s[j]^s[i];
                i++;
                j--;
            }
            return s;
        }

    真的会慢一点……实测12ms,beats 36.69% of cpp submissions。

  • 相关阅读:
    Postmanapi接口自动化局限性
    爱加密加固产品原理分析_定制版
    白话文理解DCT离散余弦变换
    mysql like使用预编译
    【Jenkins】jenkins控制台/生成的日志文件 中文乱码
    【Python】连接Linux并执行命令
    【Java】时间转换(可用于计算耗时场景)
    【Java】List去重 / 删除ArrayList中重复元素,保持顺序 / 提取两个list中不同的元素
    【Java】读取文本文件
    【Python】文件转码/编码/解码/utf8
  • 原文地址:https://www.cnblogs.com/chenjx85/p/8855327.html
Copyright © 2020-2023  润新知