反转单词顺序

这里写图片描述

思路1

递归思想

    //解法1:递归
    public String reverseSentence1(String str) {
        return (str.lastIndexOf(" ")==-1)?str:str.substring(str.lastIndexOf(" ")+1)
                +" "+reverseSentence1(str.substring(0,str.lastIndexOf(" ")));
    }

思路2

利用栈

//解法2:使用栈
    public String reverseSentence2(String str) {
        if(str.trim().equals("")&&str.length()>0)
            return str;

        Stack<String> reverse = new Stack<>();
        String string = str.trim();
        String[] strings = string.split(" ");
        for(int i = 0;i<strings.length;i++) {
            reverse.push(strings[i]);
        }
        string =  reverse.pop();
        while(!reverse.isEmpty()) {
            string = string+" " +reverse.pop();
        }
        return string;

    }

思路3

先根据空格将字符串转成字符串数组,然后倒序拼接。

//解法3:先根据空格将字符串转成字符串数组,然后倒序拼接。
    public String reverseSentence3(String str) {
        if(str.trim().equals("")&&str.length()>0)
            return str;
        StringBuilder sb  = new StringBuilder();
        String string = str;
        String[] strings = string.split(" ");
        for(int i = strings.length-1;i>=0;i--) {
            if(i==0) {
                sb.append(strings[i]);
            }else {
                sb.append(strings[i]);
                sb.append(" ");
            }
        }
        return sb.toString();

    }

思路4

反转整个句子,然后反转每个单词。

    //解法4:反转整个句子,然后反转每个单词。
    public String reverseSentence4(String str) {
        if(str.trim().equals("")&&str.length()>0)
            return str;

        char[] ch=str.toCharArray();

        reverse(ch, 0, str.length()-1);//翻转整个句子

        //翻转句子中的每个单词
        int begin=0;
        int end=0;
        while(begin!=ch.length){//若起始字符为空格,则begin和end都自加
            if(ch[begin]==' '){
            begin++;
            end++;
            }
            else if(ch[end]==' '){//遍历到终止字符为空格,就进行翻转
            reverse(ch, begin, --end);
            begin=++end;
            }
            else if(end==ch.length-1){//若遍历结束,就进行翻转
            reverse(ch, begin,end);
            begin=++end;
            }
            else{//没有遍历到空格或者遍历结束,则单独对end自减
            end++;
            }
        }    
        return String.valueOf(ch);
        }

      //完成翻转功能
        private void reverse(char[] ch,int begin,int end){
        while(begin<end){
            char temp=ch[begin];
            ch[begin]=ch[end];
            ch[end]=temp;

            begin++;
            end--;
        }
    }

思路5

反转每个单词,然后反转这个句子。

//解法5:先反转每个单词,然后反转整个句子
    public String reverseSentence5(String str) {
        // trim掉多余空格 
        if(str==null||str.trim().equals(""))
             return str;
        // 以空格切分出各个单词
         String[] words = str.split(" ");
         StringBuffer buffer = new StringBuffer();
         for(int i=0;i<words.length;i++){       
             buffer.append(reverse1(words[i].toCharArray(), 0, words[i].length()-1)).append(" ");
         }
         if(buffer.length()>0)
            // 删除最后一个空格
             buffer.deleteCharAt(buffer.length()-1);
         return reverse1(buffer.toString().toCharArray(), 0, buffer.length()-1);

     }
     private String reverse1(char[] str, int l, int r) {
         if(l>r)
             return "";
         char tmp;
         while(l<r){
             tmp = str[l];
             str[l] = str[r];
             str[r] = tmp;
             l++;
             r--;
         }
         return String.valueOf(str);
     }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值