美文网首页
leetcode的每天一题更新(reverse string)

leetcode的每天一题更新(reverse string)

作者: 今天是晴天 | 来源:发表于2017-04-07 21:39 被阅读0次

    这个题目是很多面试中都会考到的题目,一个字符串怎样进行反转并返回。

    我的思路一开始是没有错的,就是用循环来交换两个char,low是字符串开始的时候,up是字符串长度-1,用low和up来控制循环的结束当low小于up时一直进行,但是我开始想的是将这个字符串分为四个部分,如果low不是等于0或者low不等于up,将字符串分为low前面的子字符串,low,low和up中间的字符串,up,up后面的字符串,想法是没错,但是感觉好复杂,应该会new出很多字符串对象,而且运行的时候那一句合成一个字符串的地方一直报错说长度溢出,明天不用上课,好好看看是哪里出错了,也算踩坑的经历,后面在网上看方法,一开始选择最简单的方法,就是String倒序循环一个一个char加入一个新字符串中,然后将字符串返回,方法是一点问题没有,但是网站提交的时候出来time out,说明并不是一个好的算法,突然在网上看到一个用异或的方法觉得莫名其妙,然后尝试运行,发现居然accepted,想起来在暑假的时候学过一点二进制的时候学过最快的交换是用异或,但是没有做笔记忘了,这次记下来了,这个算法的思想是和我一样的,但是我忘了本来就是char交换,如果把String转换成char数组,那样的话就会好的多,附上代码:

    public class Solution {

    public String reverseString(String s) {

    char[] str = s.toCharArray();

    int begin = 0;

    int end = s.length() - 1;

    while (begin < end) {

    str[begin] = (char) (str[begin] ^ str[end]);

    str[end] = (char) (str[begin] ^ str[end]);

    str[begin] = (char) (str[end] ^ str[begin]);

    begin++;

    end--;

    }

    return new String(str);

    }

    }

    相关文章

      网友评论

          本文标题:leetcode的每天一题更新(reverse string)

          本文链接:https://www.haomeiwen.com/subject/aqkkattx.html