小学生都能看懂的题解 | #字符串变形#

问题描述

假如我们有一个字符串,比如 "h i "。这个字符串中包含几个单词,还有一些空格。我们的任务是:

  1. 把单词的顺序反过来,把最后一个单词放到最前面,第一个单词放到最后面。
  2. 每个字母的大小写反过来:大写变小写,小写变大写。
  3. 空格要保留在原来的位置,不可以丢失。

例如:

  • "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 会变成 Hi 会变成 I。所有反转的字母都存到 transformedWord 里。
            // 把反转后的单词加到结果中
            result.append(transformedWord);
        }

        return result.toString();
    }
  • 把处理好的单词或空格一个个加到 result 里。最后,result.toString() 就是我们需要的结果。

例子

假如输入是 "h i "

  1. split 会把字符串分成 ["h", " ", "i", " "]
  2. 从后往前处理:先反转 iI,再把空格加上,然后反转 hH,最后再加上一个空格。
  3. 最终输出就是 " I H "

希望这篇文章对你有帮助👍。

#题解#
小学生都能看懂的算法 文章被收录于专栏

主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务