剑指Offer:翻转单词顺序列(java版)

题目描述

给定一个句子,它的顺序是翻转的。例如,“student. a am I”,正确的句子应该是“I am a student.”。
给定一个字符串,把它翻转回正确是顺序。

先分割再按倒序拼接

可以直接转为数组,也可以使用使用栈来完成倒序。

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

两次翻转

先将整个字符串翻转,再对每个单词翻转

public class Solution {
   public String ReverseSentence(String str) {
         if(str==null || str.trim().length()==0) return str;
        int len = str.length();
        char[] ch = str.toCharArray();
        reverse(ch,0,len-1);
        int L=0;
        int R=0;
        while(R<len){
        	if(R==len-1){
        		reverse(ch,L,R);
        	}
        	if(ch[R]==' '){
        		reverse(ch,L,R-1);
        		R+=1;
        		L=R;
        	}else{
        		R++;
        	}
        }
        return new String(ch);
	}
     public static void reverse(char[] ch,int L,int R){
        while(L<R){
            char temp = ch[L];
            ch[L] = ch[R];
            ch[R] = temp;
            L++;
            R--;
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值