• 翻转单词顺序列



    例如,"student. a am I",正确的句子应该是 "I am a student."


    解题思路

    先使用空格将字符串切割为字符串数组,再重新拼接新的字符串

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

    第二种思路,先翻转整个句子,然后,依次翻转每个单词,依据空格来确定单词的起始和终止位置

    public class Solution {
        
        public String ReverseSentence(String str) {
            if(str == null || str.trim().length() == 0) {
                return str;
            }
            char[] chars = str.toCharArray();
            reverse(chars, 0, chars.length - 1);
            int blank = -1;
            for(int i = 0; i < chars.length; i++) {
                if(chars[i] == ' ') {
                    int nextBlank = i;
                    reverse(chars, blank + 1, nextBlank - 1);
                    blank = nextBlank;
                }
            }
            // 对最后一个单词单独进行反转
            reverse(chars, blank + 1, chars.length - 1);
            return new String(chars);
        }
    
        public void reverse(char[] chars, int low, int high){
            while(low < high){
                char temp = chars[low];
                chars[low] = chars[high];
                chars[high] = temp;
                low++;
                high--;
            }
        }
    }
    

  • 相关阅读:
    websocket
    svg vs canvas
    nw
    web sql
    web worker
    【转载】磁盘阵列详解
    【识记】开源软件系列
    【转载】从1.5K到18K 一个程序员的5年成长之路
    SQL中in和not in
    SQL Server select count(distinct *)
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/13863975.html
Copyright © 2020-2023  润新知