剑指offer面试题42_1翻转单词顺序(java实现)

整体思想:1.先翻转整个英文句子;2.逐个翻转句子中的每个单词

package com.example.interview42_1;

public class Solution {

	public String ReverseSentence(String str) {
		
		//整体思路:1.翻转整个英文句子;2.逐个翻转句子中的每个单词
		if (str == null || str.length() <= 0) {
			return "";
		}
		
		char[] charArray = str.toCharArray();
		//1.翻转整个英文句子
		int begin = 0;
		int end = charArray.length - 1;
		//翻转后得到的英文句子
		char[] reverseCharArray = Reverse(charArray, begin, end);
		
		//2.逐个翻转 翻转后的英文句子中的每个单词
		//需要确定begin和end
		begin = end = 0;
		while (begin < reverseCharArray.length && end < reverseCharArray.length ) {
			
			if (reverseCharArray[begin] ==' ') {
				begin++;
				end++;
			} else if (reverseCharArray[end] == ' ') {
				//如果begin指向字符不为空格,而end指向为空格,此时可以确定一个单词的起始位置
				end--;
				Reverse(reverseCharArray, begin, end);
				//调整begin的位置,end的位置,end需要+1,begin和end位于同样的位置
				begin = ++end;
				
			} else {
				//如果begin指向字符不为空格,而end指向字符不为空格
				end++;
			}
			
		}
		
		if (end == reverseCharArray.length) {
			end--;
			Reverse(reverseCharArray, begin, end);
		}
		
		//将reverseCharArray转换为字符串
		String string = String.valueOf(reverseCharArray);
		return string;
		
		

	}
	
	
	public char[] Reverse(char[] charArray, int begin, int end) {
		
		if (charArray == null) {
			return null;
		}
		
		while (begin < end) {
			char temp = charArray[begin];
			charArray[begin] = charArray[end];
			charArray[end] = temp;
			begin++;
			end--;
		}
		
		return charArray;
		
	}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值