小学生都能看懂的题解 | #字符串变形#
问题描述
假如我们有一个字符串,比如 "h i "
。这个字符串中包含几个单词,还有一些空格。我们的任务是:
- 把单词的顺序反过来,把最后一个单词放到最前面,第一个单词放到最后面。
- 每个字母的大小写反过来:大写变小写,小写变大写。
- 空格要保留在原来的位置,不可以丢失。
例如:
"h i "
变成了" I H "
。
代码解释
我们一步步来看代码的实现,理解每一行是怎么做的。
public class Solution {
public static String transformString(String s, int n) {
// 使用特殊的分隔符来分割字符串,保证空格也能分出来
String[] words = s.split("(?<=\\s)|(?=\\s)");
- 这里的
split("(?<=\\s)|(?=\\s)")
是用来把字符串切开,既分开单词,也分开空格。比如输入"h i "
,就会得到["h", " ", "i", " "]
。
// 创建一个 StringBuilder 用来存放最后的结果
StringBuilder result = new StringBuilder();
- 这里创建了
result
,用来拼接处理好的单词和空格。
// 从最后一个单词开始往前遍历
for (int i = words.length - 1; i >= 0; i--) {
StringBuilder transformedWord = new StringBuilder();
// 如果当前是空格,直接添加
if (words[i].trim().isEmpty()) {
result.append(words[i]);
continue;
}
- 这里从最后一个单词开始往前处理。
words[i].trim().isEmpty()
会判断当前部分是不是空格。如果是空格,就直接添加到结果中。
// 如果是单词,逐个字母反转大小写
for (char c : words[i].toCharArray()) {
if (Character.isUpperCase(c)) {
transformedWord.append(Character.toLowerCase(c));
} else if (Character.isLowerCase(c)) {
transformedWord.append(Character.toUpperCase(c));
} else {
transformedWord.append(c);
}
}
- 如果不是空格,那就对单词里的每个字母进行大小写反转。比如
h
会变成H
,i
会变成I
。所有反转的字母都存到transformedWord
里。
// 把反转后的单词加到结果中
result.append(transformedWord);
}
return result.toString();
}
- 把处理好的单词或空格一个个加到
result
里。最后,result.toString()
就是我们需要的结果。
例子
假如输入是 "h i "
:
split
会把字符串分成["h", " ", "i", " "]
。- 从后往前处理:先反转
i
成I
,再把空格加上,然后反转h
成H
,最后再加上一个空格。 - 最终输出就是
" I H "
。
希望这篇文章对你有帮助👍。
#题解#小学生都能看懂的算法 文章被收录于专栏
主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。