思路一

  • 先转换大小写;
  • 翻转整个字符串;
  • 以空格为分割,一个单词一个单词的进行反转;
import java.util.*;

public class Solution {
    public String trans(String s, int n) {
        // write code here
        int len = s.length();
        StringBuilder res = new StringBuilder(len);
        // 第一步:转换大小写
        for(int i = 0; i < len; ++i){
            char cur = s.charAt(i);
            if(cur >= 'a' && cur <= 'z'){
                res.append((char)(cur - 'a' + 'A')); // 小写变大写
            } else if(cur >= 'A' && cur <= 'Z'){
                res.append((char)(cur - 'A' + 'a'));  // 大写变小写
            } else{
                res.append(cur);  // 空格
            }
        }
        // 第二步:翻转整个字符串
        res = res.reverse();
        // 第三步:单个单词进行翻转
        int i = 0;
        int j = 0;
        while(i < len){
            j = i;  // 指向空格
            // 以空格为边界,翻转一个单词
            while(j < len && res.charAt(j) != ' '){
                ++j;
            }
            // 截取[i, j)区间的子串
            StringBuilder word = new StringBuilder(res.substring(i, j));
            word = word.reverse();  // 翻转单词
            res.replace(i, j, word.toString());  // 替换原单词
            i = j + 1;  // 从下一个单词开始
        }
        return res.toString();
    }
}