方法一 使用栈
一定要注意前后空格问题
import java.util.*;
public class Solution {
public String trans (String s, int n) {
// write code here
Deque<String> stack=new ArrayDeque<>();
String[] strs=s.split(" ",-1);//若干最后n位都是切割符,split(" ")不会继续切分,split(" ", -1)会继续切分
for(String str:strs){
stack.push(str);
}
StringBuilder res=new StringBuilder();
while(!stack.isEmpty()){
StringBuilder temp=new StringBuilder(stack.pop());
int len=temp.length();
for(int i=0;i<len;i++){
if(temp.charAt(i)>='A'&&temp.charAt(i)<='Z'){
temp.setCharAt(i,(char)(temp.charAt(i)-'A'+'a'));
}else if(temp.charAt(i)>='a'&&temp.charAt(i)<='z'){
temp.setCharAt(i,(char)(temp.charAt(i)-'a'+'A'));
}
}
res.append(temp);
res.append(" ");
}
res.deleteCharAt(res.length()-1);
return res.toString();
}
}
方法二,二次翻转
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param n int整型
* @return string字符串
*/
public String trans (String s, int n) {
if(n==0){
return s;
}
StringBuilder res=new StringBuilder();
for(int i=0;i<n;i++){
char ch=s.charAt(i);
if(ch>='A'&&ch<='Z'){
res.append(Character.toLowerCase(ch));
}else if(ch>='a'&&ch<='z'){
res.append(Character.toUpperCase(ch));
}else{
res.append(ch);
}
}
res.reverse();
for(int i=0;i<n;i++){
int j=i;
while(j<n&&res.charAt(j)!=' '){
j++;
}
String temp=res.substring(i,j);
StringBuilder builder=new StringBuilder(temp);
builder.reverse();
res.replace(i,j,builder.toString());
i=j;
}
return res.toString();
}
}

京公网安备 11010502036488号