对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。

输入描述:
给定一个字符串s以及它的长度n(1≤n≤500)
输出描述:
请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。
输入例子:
"This is a sample",16
输出例子:
"SAMPLE A IS tHIS"
解题

1.首先整体字符串翻转
2.大小写翻转
3.以空格为间隔划分的子字符串翻转
import java.util.*;

public class Transform {
    public String trans(String s, int n) {
        // write code here
        char[] chArr = s.toCharArray();
        change(chArr);
        reverse(chArr,0,chArr.length - 1);
        int i = 0;
        int j = 0;
        while(j<chArr.length && chArr[j] == ' ')
            j++;
        while( i < chArr.length ){
            
            if(chArr[i] == ' '){
                int tmpi = i;
                reverse(chArr,j,tmpi-1);
                while(i< chArr.length && chArr[i] == ' ')
                    i++;
                j = i;
            }else
                i++;
        }
        if(j <i)
            reverse(chArr,j,i-1);
        return String.valueOf(chArr);
    }
    public void change(char[] chArr){
        for(int i = 0;i< chArr.length;i++){
            if(isLowerCase( chArr[i])){
                chArr[i]= (char) (chArr[i] - 'a' + 'A');
            }else if(isUpperCase(chArr[i])){
                chArr[i] = (char) (chArr[i] - 'A' + 'a');
            }
        }
    }
    public void reverse(char[] chArr,int low ,int high){
        while(low < high){
            char tmp = chArr[low];
            chArr[low] = chArr[high];
            chArr[high] = tmp;
            low++;
            high--;
        }
    }
    public boolean isUpperCase(char ch){
        if('A' <= ch && ch<= 'Z')
            return true;
        return false;
    }
    public boolean isLowerCase(char ch){
        if( 'a' <= ch && ch<= 'z')
            return true;
        return false;
    }
}