LeetCode笔记:344. Reverse String

问题:

Write a function that takes a string as input and returns the string reversed.
Example:
Given s = "hello", return "olleh".

大意:

写一个函数获取输入的字符串然后返回反转后后的字符串。
比如:
给出s = "hello",返回"olleh"

思路:

思路很直接就想到,先把字符串拆分成一个个字符组成的数组,新建一个空字符串,然后从数组的最后一个字符往前遍历,每遍历一个都将其拼接到新字符处后面去,遍历完了就解决了。由于拼接的方式有很多,效率也各不相同,所以查了资料之后,选择了StringBuilder的方式,据说速度最快,但有线程安全的问题,而且只有JDK5支持。

代码(Java):

public class Solution {
    public String reverseString(String s) {
        char[] sCharArr = s.toCharArray();// 拆分成数组
        StringBuilder sb = new StringBuilder();
        for (int i = sCharArr.length - 1; i >= 0; i--) {
            // 遍历添加到末尾
            sb.append(sCharArr[i]);
        }
        return sb.toString();
    }
}

由于数据不够,也看不出我的速度比起别人到底如何,但我在项目中确实发现简单的用"+"来拼接字符串在量大了以后真的会非常慢,所以有其他方法的话还是尽量不要直接用"+"号了。

他山之石:

Discuss中看到一行代码解决的,也是用StringBuilder:

public class Solution {
    public String reverseString(String s) {
        return  new StringBuilder(s).reverse().toString();
    }
}

所以熟悉原生支持的方法真的很重要= =

C++:

其实C++的string本身就有一个reverse方法,接收开始和结束的迭代器,就可以做到反转了,但是提交后显示速度非常慢。

后来想到用copy配合rbegin、rend的反向迭代器来做,或者不要copy了,直接就返回一个反向迭代器构造出的字符串,看讨论中其他人也用过这种方法,但是可能是后来新增了示例,遇到有换行的字符串就会报错,尴尬。

代码(C++):

class Solution {
public:
    string reverseString(string s) {
        // 直接用reverse方法:
        return reverse(s.begin(), s.end());

        // copy搭配反向迭代器:
        // string res;
        // copy(s.rbegin(), s.rend(), res.begin());
        // return res;

        // 反向迭代器搭配构造函数:
        // return string(s.rbegin(), s.rend());
    }
};

查看作者首页

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,472评论 0 4
  • 53.计算字符 在字符串中获取字符值的数量, 可以使用字符串字符属性中的计数属性: let unusualMena...
    无沣阅读 4,853评论 0 4
  • 看似花非花雾非雾,滔滔江水留不住
    静静的左轮阅读 1,501评论 0 1
  • 阴雨天,我会放下一些手中的杂事 然后沿着一条街走到尽头 在一个灯火阑珊处 寻一盏灯给予的光芒 不见谁的谁来谁往 然...
    柴道一阅读 2,490评论 4 4
  • 重读该书,年过半百的我仍然被感动着。它是净化灵魂之书,保尔才是有着坚定共产主义信仰的无产阶级的钢铁战士。如果我们在...
    魅力春天阅读 5,257评论 0 3