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();
        }
    }
    

      

  • 相关阅读:
    给XML文件定义DTD
    详探TextRange对象用execCommand()执行命令
    获取屏幕,浏览器,网页高度宽度
    花点时间搞清top、postop、scrolltop、scrollHeight、offsetHeight
    DataView数据组件
    回调实现无刷新级联下拉框(.net)
    ASP.NET的简单数据绑定
    详探TextRange对象查找与选择
    方维系统常用的jquery库以及各个库的含义
    方维购物分享系统 给店铺品牌加喜欢收藏的功能
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8978008.html
Copyright © 2011-2022 走看看