目录
解题过程:
描述:
对于一个长度为 n 字符串,我们需要对它做一些变形。
首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。
比如"Hello World"变形后就变成了"wORLD hELLO"。
数据范围: 1≤n≤1061≤n≤106 , 字符串中包括大写英文字母、小写英文字母、空格。
进阶:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)
分析条件:
1.大小写互换
2,每一块进行翻转
解题思路:
最开始我的错误思路是:
我将字符串所有字符均大小写互换后,按照" "分块,倒序添加到StringBulider中,但是对于类似"H L "末尾有空格的用例时无法处理,末尾的空格被丢弃
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 "";
}
//1.创建一个sb存储存储字符串
StringBuilder sb = new StringBuilder();
//2.将每一个字符大小互换,空格不变
for(int i = 0;i < n;i++){
if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z'){
sb.append((char)(s.charAt(i) - 'a' + 'A'));
}else if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'){
sb.append((char)(s.charAt(i) - 'A' + 'a'));
}else{
sb.append(" ");
}
}
String s1 = sb.toString();
String[] part = s1.split(" ");
StringBuilder sb2 = new StringBuilder();
for(int i = part.length - 1;i >= 1;i--){
sb2.append(part[i]);
sb2.append(" ");
}
sb2.append(part[0]);
//3.大小写切换
return sb2.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 "";
}
//1.创建一个sb存储存储字符串
StringBuilder sb = new StringBuilder();
//2.将每一个字符大小互换,空格不变
for(int i = 0;i < n;i++){
if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z'){
sb.append((char)(s.charAt(i) - 'a' + 'A'));
}else if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'){
sb.append((char)(s.charAt(i) - 'A' + 'a'));
}else{
//空格也保留
sb.append(s.charAt(i));
}
}
//3.翻转整个字符数组
sb = sb.reverse();
//4.将字符数组中非空格的区块二次翻转
for(int i = 0;i < n;i++){
if(sb.charAt(i) == ' '){
continue;
}
//第二个指针记录到区块末尾
int j = i;
while(j < n && sb.charAt(j) != ' '){
j++;
}
String temp = sb.substring(i,j);
StringBuilder sbTemp = new StringBuilder(temp);
String newStr = sbTemp.reverse().toString();
sb.replace(i,j,newStr);
i=j;
}
return sb.toString();
}
}