剑指offer 42题 【知识迁移能力】翻转单词顺序列

题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

牛客传送门:点击打开链接

思路:先翻转整个字符串、然后从头开始遍历,遇到空格则翻转,注意边界值。
public class Title42 {
	public String ReverseSentence(String str) {
        if(str == null || str.length() == 0)
        	return str;
        char[] s = str.toCharArray();
        
        // 旋转一次
        rotate(s,0,s.length-1);
        
        int begin=0;
        for(int i=1;i<s.length;i++){
        	if(s[i] == ' '){
        		rotate(s,begin,i-1);
        		begin = i+1;
        	// 注意边界值的处理
        	}else if(i == s.length-1){
        		rotate(s,begin,i);
        	}
        }
        
        return String.valueOf(s);
    }
	
	public void rotate(char[] s,int begin,int end){
		while(begin < end){
			char temp = s[begin];
			s[begin] = s[end];
			s[end] = temp;
			
			begin++;
			end--;
		}
	}
	
	public static void main(String[] args) {
		System.out.println(new Title42().ReverseSentence("student. a am I"));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值