557.反转字符串中的单词III

  1. 557.反转字符串中的单词III
    1. 557.1 题目
    2. 557.2 题解
      1. 合成字符串数组
      2. 拼接字符串
    3. 557.3 代码
    4. 557.4 运行结果

557.反转字符串中的单词III


557.1 题目

给定一个字符串 s,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"

示例 2:

输入:s = "Mr Ding"
输出:"rM gniD"

提示:

  • 1 <= s.length <= 5 * 10^4
  • s 包含可打印的 ASCII 字符。
  • s 不包含任何开头或结尾空格。
  • s 里至少有一个词。
  • s 中的所有单词都用一个空格隔开。

557.2 题解

合成字符串数组

// 方法一:合成字符串数组
// 分割成字符串数组后每个字符串转成字符数组
// 使用Array.Reverse方法反转
// new string传入字符数组形成字符串丢到当前字符串中
// 使用string.Join方法拼接
static string ReverseWords1(string s)
{
    // 分割字符串为单词数组
    string[] words = s.Split(' ');

    // 逐个单词反转
    for (int i = 0; i < words.Length; i++)
    {
        char[] wordChars = words[i].ToCharArray();
        Array.Reverse(wordChars);
        words[i] = new string(wordChars);
    }

    // 拼接反转后的单词数组为结果字符串
    return string.Join(" ", words);
}

拼接字符串

// 方法二:拼接字符串
// 分割成字符串数组后每个字符串转成字符数组
// 使用Array.Reverse方法反转
// new string传入字符数组形成字符串拼接到结果字符串
// 结果字符串使用Trim移除末尾多余的空格并返回
static string ReverseWords2(string s)
{
    // 分割字符串为单词数组
    string[] words = s.Split(' ');

    // 逐个单词反转并拼接为结果字符串
    string result = "";
    for (int i = 0; i < words.Length; i++)
    {
        char[] wordChars = words[i].ToCharArray();
        Array.Reverse(wordChars);
        result += new string(wordChars) + " ";
    }

    // 移除末尾多余的空格
    result = result.Trim();

    return result;
}

557.3 代码

using System;

class Program
{
    static void Main()
    {
        #region 题目

        // 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

        // 示例 1:
        // 输入:s = "Let's take LeetCode contest"
        // 输出:"s'teL ekat edoCteeL tsetnoc"

        // 示例 2:
        // 输入:s = "Mr Ding"
        // 输出:"rM gniD"

        // 提示:
        // 1 <= s.length <= 5 * 10^4
        // s 包含可打印的 ASCII 字符。
        // s 不包含任何开头或结尾空格。
        // s 里 至少 有一个词。
        // s 中的所有单词都用一个空格隔开。

        #endregion

        #region 测试

        // 示例 1
        string str1 = "Let's take LeetCode contest";
        string result1 = ReverseWords1(str1);
        Console.WriteLine($"示例1 方法1 输出:{result1}");
        string result1_2 = ReverseWords2(str1);
        Console.WriteLine($"示例1 方法2 输出:{result1_2}");

        // 示例 2
        string str2 = "Mr Ding";
        string result2 = ReverseWords1(str2);
        Console.WriteLine($"示例2 方法1 输出:{result2}");
        string result2_2 = ReverseWords2(str2);
        Console.WriteLine($"示例2 方法2 输出:{result2_2}");

        #endregion
    }

    #region 答案

    // 方法一:合成字符串数组
    // 分割成字符串数组后每个字符串转成字符数组
    // 使用Array.Reverse方法反转
    // new string传入字符数组形成字符串丢到当前字符串中
    // 使用string.Join方法拼接
    static string ReverseWords1(string s)
    {
        // 分割字符串为单词数组
        string[] words = s.Split(' ');

        // 逐个单词反转
        for (int i = 0; i < words.Length; i++)
        {
            char[] wordChars = words[i].ToCharArray();
            Array.Reverse(wordChars);
            words[i] = new string(wordChars);
        }

        // 拼接反转后的单词数组为结果字符串
        return string.Join(" ", words);
    }

    // 方法二:拼接字符串
    // 分割成字符串数组后每个字符串转成字符数组
    // 使用Array.Reverse方法反转
    // new string传入字符数组形成字符串拼接到结果字符串
    // 结果字符串使用Trim移除末尾多余的空格并返回
    static string ReverseWords2(string s)
    {
        // 分割字符串为单词数组
        string[] words = s.Split(' ');

        // 逐个单词反转并拼接为结果字符串
        string result = "";
        for (int i = 0; i < words.Length; i++)
        {
            char[] wordChars = words[i].ToCharArray();
            Array.Reverse(wordChars);
            result += new string(wordChars) + " ";
        }

        // 移除末尾多余的空格
        result = result.Trim();

        return result;
    }
    #endregion
}

557.4 运行结果

示例1 方法1 输出:s'teL ekat edoCteeL tsetnoc
示例1 方法2 输出:s'teL ekat edoCteeL tsetnoc
示例2 方法1 输出:rM gniD
示例2 方法2 输出:rM gniD


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏