zoukankan      html  css  js  c++  java
  • 翻转字符串里的单词

    给定一个字符串,逐个翻转字符串中的每个单词。

    示例:  

    输入: "the sky is blue",
    输出: "blue is sky the".
    

    说明:

    • 无空格字符构成一个单词。
    • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
    • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

    进阶: 请选用C语言的用户尝试使用 O(1) 空间复杂度的原地解法。

    第一种方法:时间复杂度高,但空间复杂度低

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

    第二种方法:时间复杂度低,但空间复杂度为O(n)

    public class Solution {
        public String reverseWords(String s) {
            if(s.length()==0)return s;
            char[] ch=s.toCharArray();
            char[] res=new char[ch.length];
            int len=helper(ch,ch.length-1,res,0,0);
            return new String(res,0,len);
        }
        private int helper(char[] ch,int r,char[] res,int l,int len){
            while(r>=0&&ch[r]==' '){
                r--;
            }
            if(r<0)return Math.max(0,len-1);
            int rigth=r;
            while(r>=0&&ch[r]!=' '){
                r--;
            }
            len+=rigth-r+1;
            for(int left=r+1;left<=rigth;left++,l++){
                res[l]=ch[left];
            }
            if(l<res.length){
                res[l++]=' ';
            }
            return helper(ch,r,res,l,len);
        }
    }
  • 相关阅读:
    Spring加载机制
    SpringMVC 请求过程
    Spring事务传播机制
    数组扩容
    hashmap 底层原和扩容机制
    spring源码
    金字塔表达方式(三)如何使得一个事情变得清晰有逻辑
    金字塔表达方式(二)如何判断事情的逻辑是否正确
    C#设计模式(3)——单例模式(Singleton)
    C#设计模式(2)——工厂模式
  • 原文地址:https://www.cnblogs.com/yihangZhou/p/10158449.html
Copyright © 2011-2022 走看看