资讯专栏INFORMATION COLUMN

LeetCode 2

Corwien / 2039人阅读

摘要:接下来要想提速,就在正则表达式和字符串拼接这两部分。在这篇文章,作者拼接了个英文字母次,速度差别达到了上万倍。还有一个,与的区别就是是线程安全的,是线程不安全的。

Reverse Words in a String https://oj.leetcode.com/problems/reverse-words-in-a-string/

Given an input string, reverse the string word by word.
For example, Given s = "the sky is blue", return "blue is sky the".

刚开始的想法就是用Java的split函数来把词分到数组里,然后反向加一下,刚开始是这么写的

public class Solution {
    public String reverseWords(String s) {
        String result = "";
        String[] words = s.trim().split(" ");
        String space = "";
        for(int i = words.length - 1; i >= 0; i--){
            result += space;
            result +=words[i];
            space = " ";
        }
        return result;
    }
}

后来发现题目还会有多个空格,split函数你传给它一个空格它就只按一个空格来分割,不像python等语言如果你默认不给参数就会按照空白来分,包括多个空格,制表符等。

经过查资料还知道split函数的参数其实是正则表达式,这样就能用正则来识别多个空格了,然后我将s+传给split函数来匹配任意空格,然后一提交,发现超时了,系统返回的信息提示上次处理的数据的长度竟然有50000。

然后我将split的参数改成[ ]+,只匹配多个空格,还是超时。接下来要想提速,就在正则表达式和字符串拼接这两部分。我先试了字符串拼接,用StringBuffer而不是String的+=来拼接,然后就顺利通过了,代码如下。

public class Solution {
     public String reverseWords(String s) {
         String[] words = s.trim().split("[ ]+");
         String space = "";
         StringBuffer sb = new StringBuffer();
         for(int i = words.length - 1; i >= 0; i--){
             sb.append(space);
             sb.append(words[i]);
             space = " ";
         }
         return sb.toString();
    }
}

看来以后用字符串拼接还是用StringBuffer好,省时间太多了,因为String的+=拼接会一直创建新的String对象,StringBuffer就不需要重新创建对象。在这篇文章http://blog.csdn.net/yirentianran/article/details/2871417,作者拼接了26个英文字母5000次,速度差别达到了上万倍。

还有一个StringBuilder,StringBuilder与StringBuffer的区别就是StringBuffer是线程安全的,StringBuilder是线程不安全的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64077.html

相关文章

  • 6-9月技术文章汇总

    摘要:分布式的管理和当我在谈论架构时我在谈啥状态码详解无状态协议和请求支持哪些方法分层协议栈有哪些数据结构运用场景说说你常用的命令为什么要有包装类面向对象的特征是啥是啥有什么好处系统设计工程在线诊断系统设计与实现索引背后的数据结构及算法原理软技能 HTTP 【HTTP】分布式session的管理 【HTTP】Cookie和Session 【HTTP】当我在谈论RestFul架构时我在谈啥?...

    miya 评论0 收藏0
  • LeetCode 精选TOP面试题【51 ~ 100】

    摘要:有效三角形的个数双指针最暴力的方法应该是三重循环枚举三个数字。总结本题和三数之和很像,都是三个数加和为某一个值。所以我们可以使用归并排序来解决这个问题。注意因为归并排序需要递归,所以空间复杂度为 ...

    Clect 评论0 收藏0
  • LeetCode天梯>Day026 反转链表(递归法+(迭代法)双链表法) | 初级算法 | Py

    摘要:关于递归这里提一两点递归基本有这几步递归的模板,终止条件,递归调用,逻辑处理。 ?作者简介:大家好,我是车神哥,府学路18号的车神? ?个人主页:应无所住而生...

    imingyu 评论0 收藏0
  • [LeetCode] 811. Subdomain Visit Count

    Problem A website domain like discuss.leetcode.com consists of various subdomains. At the top level, we have com, at the next level, we have leetcode.com, and at the lowest level, discuss.leetcode.com...

    jzman 评论0 收藏0
  • 优秀程序员都应该学习的 GitHub 上开源的数据结构与算法项目

    摘要:强烈推荐上值得前端学习的数据结构与算法项目,包含图的演示过程与视频讲解。该仓库包含了多种基于的算法与数据结构,提供进一步阅读的解释和链接。数据结构和算法必知必会的个代码实现。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法为王。想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手;只有内功深厚者,前端之路才会走得...

    cheukyin 评论0 收藏0
  • LeetCode 397 整数替换[递归] HERODING的LeetCode之路

    摘要:解题思路这题就是最基础的递归运算题目,两个选择,一个是偶数,一个是奇数,偶数直接除操作,奇数变成左右两个偶数继续操作选择操作最小的,注意有一个用例是,解决方法有两种,第一就是首先把的二次幂都干掉,代码如下 ...

    HtmlCssJs 评论0 收藏0

发表评论

0条评论

Corwien

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<