思路:

  • 不使用语言中的 API,而是自己编写对应的函数。
  • 将字母大小写转换后,反转整个字符串,再反转每个单词。
  • 注意JAVA的字符串不可变,对于字符串不可变的语言,首先得把字符串转化成其他可变的数据结构.。
  • 注意下标不要越界。

复杂度:

时间复杂度 O(n) ,需要 O(n) 的空间来存储字符串空间复杂度O(n)

代码实现(Java)

public class Solution {

	public String trans(String s, int n) {
		StringBuilder sb=new StringBuilder(s);
		 //单词大小写反转
      	int	i=0;
      	char tmp;
      	while(i<n) {
      		tmp=sb.charAt(i);
      		if('A'<=tmp&&tmp<='Z') sb.setCharAt(i, (char) (tmp+32));
      		else if('a'<=tmp&&tmp<='z') sb.setCharAt(i, (char) (tmp-32));
      		i++;
      	}
		//翻转字符串
		reverse(sb,0,n-1);//自定义方法
		//翻转每个单词
		reverseEachWord(sb);//自定义方法
		
		return sb.toString();
	}
	private void reverse(StringBuilder sb,int left,int right) {
		while(left<right) {
			char tmp=sb.charAt(left);
			sb.setCharAt(left++, sb.charAt(right));
			sb.setCharAt(right--, tmp);
		}
	}
	private void reverseEachWord(StringBuilder sb) {
		int n=sb.length();
		int start=0,end=0;
		while(start<n) {
			//循环至单词的末尾
			while(end<n&&sb.charAt(end)!=' ') {
				end++;
			}
			reverse(sb,start,end-1);//翻转单词
			start=end+1;//更新start,去找下一个单词
			++end;
		}
	}
}