Reverse the ordering of words in a string

后端 未结 30 4384
青春惊慌失措
青春惊慌失措 2020-11-22 10:23

I have this string s1 = \"My name is X Y Z\" and I want to reverse the order of the words so that s1 = \"Z Y X is name My\".

I can do it u

30条回答
  •  误落风尘
    2020-11-22 11:11

    In Java using an additional String (with StringBuilder):

    public static final String reverseWordsWithAdditionalStorage(String string) {
        StringBuilder builder = new StringBuilder();
    
        char c = 0;
        int index = 0;
        int last = string.length();
        int length = string.length()-1;
        StringBuilder temp = new StringBuilder();
        for (int i=length; i>=0; i--) {
            c = string.charAt(i);
            if (c == SPACE || i==0) {
                index = (i==0)?0:i+1;
                temp.append(string.substring(index, last));
                if (index!=0) temp.append(c);
                builder.append(temp);
                temp.delete(0, temp.length());
                last = i;
            }
        }
    
        return builder.toString();
    }
    

    In Java in-place:

    public static final String reverseWordsInPlace(String string) {
        char[] chars = string.toCharArray();
    
        int lengthI = 0;
        int lastI = 0;
        int lengthJ = 0;
        int lastJ = chars.length-1;
    
        int i = 0;
        char iChar = 0;
        char jChar = 0;
        while (i=i; j--) {
                    jChar = chars[j];
                    if (jChar == SPACE) {
                        lengthJ = lastJ-j;
                        swapWords(lastI, i-1, j+1, lastJ, chars);
                        lastJ = lastJ-lengthI-1;
                        break;
                    }
                }
                lastI = lastI+lengthJ+1;
                i = lastI;
            } else {
                i++;
            }
        }
    
        return String.valueOf(chars);
    }
    
    private static final void swapWords(int startA, int endA, int startB, int endB, char[] array) {
        int lengthA = endA-startA+1;
        int lengthB = endB-startB+1;
    
        int length = lengthA;
        if (lengthA>lengthB) length = lengthB;
    
        int indexA = 0;
        int indexB = 0;
        char c = 0;
        for (int i=0; ilengthA) {
            length = lengthB-lengthA;
            int end = 0;
            for (int i=0; ilengthB) {
            length = lengthA-lengthB;
            for (int i=0; istart; i--) {
            array[i] = array[i-1];
        }
    }
    
    private static final void shiftLeft(int start, int end, char[] array) {
        for (int i=start; i

提交回复
热议问题