【Offer】[58-1] 【翻转单词顺序】

题目描述

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

牛客网刷题地址

思路分析

 首先将整个字符串翻转,然后在一次翻转单个单词

测试用例

  1. 功能测试:句子中有多个单词;句子中只有一个单词。
  2. 特殊输入测试:字符串指针为nullptr 指针;字符串的内容为空;
    字符串中只有空格。

Java代码

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

     public static String ReverseSentence(String str) {
        return Solution1(str);
    }


    private static String Solution1(String str) {
        if(str==null || str.length() <= 0) {
            return str;
        }
        char[] chars = str.toCharArray();
        
        reverseCore(chars, 0, chars.length-1);
        
        int start = 0;
        int end =0; 
        
        while(start<chars.length){
            while(end<chars.length && chars[end]!=' ')
                end++;
            reverseCore(chars,start,end-1);
            start=++end;
        }
        
        return String.valueOf(chars);
    }
    
    private static void reverseCore(char[] chars ,int start,int end) {
        while(start<end) {
            char tmp = chars[start];
            chars[start]=chars[end];
            chars[end]=tmp;
            start++;
            end--;
        }
    }

    private static void test1() {

    }

    private static void test2() {

    }
    private static void test3() {

    }

}

代码链接

剑指Offer代码-Java

猜你喜欢

转载自www.cnblogs.com/haoworld/p/offer581-fan-zhuan-dan-ci-shun-xu.html