面试 42-1:翻转单词顺序

一. 题目

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串”I am a student.”,则输出”student. a am I”.

代码请到我的代码库中下载 Point2Offer

二. 代码

package ween_2;
/**
 * 剑指offer: 翻转单词顺序
 * 方法:两次翻转,第一次翻转整个句子,第二次翻转单词
 * 测试用例:功能测试(有多个单词,1个单词)
 * 特殊输入测试(空指针,字符串为空,字符串只有空格)
 * @author dingding
 * Date:2017-6-20 20:00
 * Declaration: All Rights Reserved!
 */
public class ReverseWord {

    public static void main(String[] args) {
        test1();
        test2();
        test3();
        test4();
        test5();
    }

    //翻转函数
    private static void reverse(char[] str,int start,int end){
        if (str==null || start<0 || end >str.length ||end <start || str.length<1) {
            return;   //if外面的其他语句都不会执行
        }
        while (start<end){
            char tmp = str[start];
            str[start] = str[end];
            str[end] = tmp;

            start++;
            end--;
        }
    }

    //翻转句子
    private static char[] reverseSentence(char[] str){
        if (str == null || str.length<1) {
            return str;
        }

        reverse(str, 0, str.length-1);

        int start = 0;
        int end = 0;
        while (start <str.length ) {
            if (str[start] == ' ') {
                start++;
                end++;
            }else if (end == str.length ||str[end] == ' ' ) {  //或的左右顺序有关
                reverse(str, start, end-1);
                end++;
                start = end;
            }else {
                end++;
            }
        }
        return str;
    }

    /*====================测试用例=================*/
    private static void test1() {
        System.out.println(new String(reverseSentence("I am a student.".toCharArray())));
    }

    private static void test2() {
        System.out.println(new String(reverseSentence("Wonderful".toCharArray())));
    }

    private static void test3() {
        System.out.println(new String(reverseSentence("".toCharArray())));
    }

    private static void test4() {
         System.out.println(new String(reverseSentence("    ".toCharArray())));
    }

    private static void test5() {
        if (reverseSentence(null)==null) {
            System.out.println("空指针!");
        }
    }

}


有不妥当之处,麻烦告知:D

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值