//时间复杂度O(N)空间复杂度O(1)
class Solution {
public:string trans(string s, int n) {
// write code here
int left=0,right=0;
while(right<n){
if(s[right]!=' ')
right++;
else{//翻转left到right-1之间的内容
int i=left,j=right-1;
while(j>i){
char ch=s[i];
s[i]=s[j];
s[j]=ch;
i++;j--;
}
left=right+1;
right++;
}
}
//因为每次是都是遇到空格才翻转,所以最后一个单词会被遗漏
int i=left,j=n-1;
while(j>i){
char ch=s[i];
s[i]=s[j];
s[j]=ch;
i++;j--;
}
//最后再整体翻转一下
i=0,j=n-1;
while(j>i){
char ch=s[i];
s[i]=s[j];
s[j]=ch;
i++;j--;
}
//然后再遍历一遍把大小写互换
for(int index=0;index<n;index++){
if(s[index]==' ')
continue;
else if(s[index]>='a'&&s[index]<='z'){
s[index]=s[index]-32;
}
else s[index]=s[index]+32;
}
return s;
}
};