import java.util.*;
public class Solution {
//step1:先将字符串的大小写转换
//step2:将字符串以空格为界,分割单词
//step3:将单词入栈,注意需要判断原字符串最后一位是不是空格的情况,如果是需要在结果字符串开头加上空格
//这里的多加个判断,可以保证字符串最后不会被多添加一个空格
//while(!stack.isEmpty()){
//res.append(stack.pop());
//if(!stack.isEmpty()){
//res.append(" ");
//}
//}
public String trans (String s, int n) {
if(n == 0){
return s;
}
// write code here
// 把字符串中由空格隔开的单词反序,同时反转每个字符的大小写
// 应该带着空格一起放入栈中
// a 97, A 65, z 122, Z 90
StringBuilder res = new StringBuilder(lowerAndUpper(s));
Stack<String> stack = new Stack<>();
for(int i = 0; i < n; i++){
// 以空格为界,分割单词
int j = i;
while(j < n && res.charAt(j) != ' '){
j++;
}
stack.push((String)(res.substring(i, j)));
i = j;
}
if(s.charAt(s.length() - 1) == ' '){
res = new StringBuilder(" ");
}else{
res = new StringBuilder();
}
while(!stack.isEmpty()){
res.append(stack.pop());
if(!stack.isEmpty()){
res.append(" ");
}
}
return res.toString();
}
public String lowerAndUpper(String s){
char[] cs = s.toCharArray();
StringBuilder res = new StringBuilder();
for(char c : cs){
if(c >= 65 && c <= 90){
c = (char) (c + 32);
}else if(c >= 97 && c <= 122){
c = (char) (c - 32);
}
res.append(c);
}
return res.toString();
}
}