翻转单词顺序列

54 阅读1分钟

翻转单词顺序列

//注意:
// 题目应该有一个隐含条件,就是不能用额外的空间。
// 虽然 Java 的题目输入参数为 String 类型,需要先创建一个字符数组使得空间复杂度为 O(N),
// 但是正确的参数类型应该和原书一样,为字符数组,并且只能使用该字符数组的空间。
// 任何使用了额外空间的解法在面试时都会大打折扣

//思路:先旋转每个单词,在旋转整个字符数组
public String ReverseSentence(String str) {
    char[] chs = str.toCharArray();
    int N = chs.length;

    //先翻转每个单词
    int start=0;
    int end=0;
    while(end<=N){
        if(end==N || chs[end]==' '){
            reverse(chs,start,end-1);
            start = end+1;
        }
        end++;
    }

    //再翻转整个字符串
    reverse(chs,0,N-1);
    return new String(chs);
}

private void reverse(char[] chs,int start,int end){
    while (start<end){
        char tmp = chs[start];
        chs[start] = chs[end];
        chs[end] = tmp;
        start++;
        end--;
    }
}

www.mianshi.onlinewww.i9code.cn

本文由博客一文多发平台 OpenWrite 发布!