LeetCode-557. Reverse Words in a String III

Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.

Example 1:

Input: "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"

Note: In the string, each word is separated by single space and there will not be any extra space in the string.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------我的方法,耗时22ms:

public class Solution {
    public String reverseWords(String s) {
        String[] array = s.split(" ");
	StringBuilder sb = new StringBuilder();
	char [] splitArray  = null;
	for(int i=0; i < array.length;i++){
		splitArray = array[i].toCharArray();
		int iLength = splitArray.length;
		int start = 0;
		int end = iLength;
		char temp;
		while(start < end){
			temp=splitArray[start];
   			splitArray[start]=splitArray[end-1];
   			splitArray[end-1]=temp;
   			start++;
  			end--;
		}
		if(sb.length() == 0){
		    sb.append(new String(splitArray));
		}else{
		    sb.append(" "+new String(splitArray));
		}
	}
	return sb.toString();
    }
}


另一种方法,耗时6ms:

public class Solution {
    public String reverseWords(String s) {
        char[] chars = s.toCharArray();
        int i=0;
        while(i<chars.length){
            int wordEnd = getWordEnd(chars, i);
            reverse(chars, i, wordEnd);
            i = wordEnd+1;
        }
        return new String(chars);
    }
    
    public int getWordEnd(char[] chars, int i){
        while(i < chars.length && chars[i]!=' '){
            i++;
        }
        return i;
    }
    
    public void reverse(char[] chars, int from, int to){
        //System.out.println("reverse "+Arrays.toString(chars)+" "+ from + " "+to);
        for(int i=from; i<from + (to-from)/2;i++){
            swap(chars, i, to - (i-from) - 1);
        }
    }
    
    public void swap(char[] arr, int i, int j){
        char tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值