zoukankan      html  css  js  c++  java
  • 剑指offer——翻转单词顺序列

    翻转单词顺序列

    牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

    解:1、其中有个需要注意的点,就是可能输入的字符串是包含多个空格的"   ",这样的话,不能单纯的依靠str.length==1来解决

    现在可以借助String的一个方法trim()可以删除字符串的前面和后面的多余空格。这样就不会有上面的问题了。

    2、还有一个问题就是String是一个final类,每次进行赋值的时候,都需要重新开辟空间进行拷贝,所以有个改进方法就是,在进行连接字符串的时候,采用大小可变的StringBuffer来进行,到最后才将StringBuffer字符串改为String类型的

    3,在进行字符串反转时,要注意,反转的是以空格为划分的,不是直接将所有的字符反转,此时可以用到String类的一个split()方法,对字符串进行分割

    public class Solution {
        public String ReverseSentence(String str) {
            if(str == null || str.trim().equals("")) return str;
            String[] strs = str.split(" ");
            
            for(int start = 0, end = strs.length - 1; start < end; start++, end--){
                swap(strs, start, end);
            }
            str = "";
            for(int i = 0; i < strs.length - 1; i++){
                str = str + strs[i] + " ";
            }
            return str + strs[strs.length - 1];
        }
    
        public void swap(String[] chars, int i, int j){
            String temp = chars[i];
            chars[i] = chars[j];
            chars[j] = temp;
        }
    }
    

      

    另一种方法,不用swap,而是直接在split之后,将数组倒序拼接

    public class Solution {
        public String ReverseSentence(String str) {
            if(str == null || str.trim().equals("")) return str;
            String[] strs = str.split(" ");
            str = "";
            for(int i = strs.length - 1; i >= 0; i--){
                str += strs[i];
                if(i != 0) str += " ";
            }
            return str;
    
        }
    }
    

      

    使用StringBuffer来进行反转,此时StringBuffer中有个append来将字符串进行拼接

    public class Solution {
        public String ReverseSentence(String str) {
            if(str == null || str.trim().equals("")) return str;
            String[] strs = str.split(" ");
            
            StringBuffer s = new StringBuffer();
            for(int i = strs.length - 1; i >= 0; i--){
                s.append(strs[i]);
                if(i != 0){
                    s.append(" ");
                }
            }
            return s.toString();
        }
    }
    

      

  • 相关阅读:
    Thinkphp 5.0.15 设计缺陷导致Insert/update-SQL注入 分析
    Thinkphp 3.2.3 parseWhere设计缺陷导致update/delete注入 分析
    Thinkphp <= 5.0.10 缓存getshell复现
    Typecho-反序列化漏洞学习
    Discuz3.4-SSRF-从触发点到构造payload
    php session序列化攻击面浅析
    浅析一款扫描dom-xss的浏览器插件
    sqlmap Bool型&延时型 检测策略分析
    SpringSecurityOauth RCE (CVE-2016-4977) 分析与复现
    k8s之statefulSet-有状态应用副本集控制器
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8978008.html
Copyright © 2011-2022 走看看