41 翻转单词顺序: 输入一个英文句子,翻转句子中单词的顺序,但单词内字的顺序不变

一、题目
输入一个英文句子,翻转句子中单词的顺序,但单词内字的顺序不变。为简单起见,标点符号和普通字母一样处理。
举例说明

例如输入字符串”I am a student. ”,则输出”student. a am I”。

二、解题思路
第一步翻转句子中所有的字符。比如翻转“I am a student. ”中所有的字符得到”.tneduts a m a I”,此时不但翻转了句子中单词的顺序,连单词内的字符顺序也被翻转了。第二步再翻转每个单词中字符的顺序,就得到了”student. a am I”。这正是符合题目要求的输出。

  public static char[] reverseSentence(char[] data) {
        if (data == null || data.length < 1) {
            return data;

        }
        reverse(data,0,data.length-1);


        int start=0;
        int end=0;
        while(start<data.length) {
            if(data[start]==' ') {
                start++;
                end++;
                
            }else if(end==data.length||data[end]==' ') {
            //顺序不能颠倒,因为end一开始就加1,所以是data.length为界限
                reverse(data,start,end-1);
                end++;
                start=end;
                
            }else {
                end++;
            }
        }

        return data;

    }


    public static void reverse(char[] data, int start, int end) {
        if (data == null || data.length < 1 || end > data.length || start < 0 || start > end) {
            return;

        }
        while (start < end) {
            char temp = data[start];
            data[start] = data[end];
            data[end] = temp;
            start++;
            end--;
        }
    }

方法二:

递归实现:

 public static String ReverSentence(String str) {
        return (str.lastIndexOf(" ") == -1) ?
                str :
                str.substring(str.lastIndexOf(" ") + 1) + " " + ReverSentence(str.substring(0, str.lastIndexOf(" ")));
    }
    
//输出student. a am I

方法三:
使用split函数,通过该函数判断字符串的空格

public String ReverseMethod2Fun(String str){
        StringBuffer stringbuffer = new StringBuffer("");
        if(str.length() <= 0 || str.trim().equals("")){
            return str;
        }
        String[] strSet = str.split(" ");
        int length = strSet.length;
        for(int i = length - 1; i > 0;i--){
            stringbuffer.append(strSet[i] + " ");
            
        }
        stringbuffer.append(strSet[0]);   //单独加最后一个是不想最后多一个空格
        return stringbuffer.toString();
    }  
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值