389.找不同

  1. 389.找不同
    1. 389.1 题目
    2. 389.2 题解
      1. List添加后移除
      2. 求和后作差强转成字符
    3. 389.3 代码
    4. 389.4 运行结果

389.找不同


389.1 题目

给定两个字符串 st,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例 1:

输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。

示例 2:

输入:s = "", t = "y"
输出:"y"

提示:

  • 0 <= s.length <= 1000
  • t.length == s.length + 1
  • st 只包含小写字母

389.2 题解

List添加后移除

// 方法一:List添加后移除
static char FindAddedChar1(string s, string t)
{
    // 创建一个字符列表用于存储字符串 t 的每个字符
    List<char> tList = new List<char>();
    foreach (var item in t)
    {
        // 将字符串 t 的每个字符添加到列表中
        tList.Add(item);
    }

    // 遍历字符串 s 的每个字符
    foreach (var item in s)
    {
        // 如果列表中包含当前字符,移除列表中的该字符
        if (tList.Contains(item))
        {
            tList.Remove(item);
        }
    }

    // 返回列表中剩余的字符,即在字符串 t 中被添加的字符
    return tList[0];
}

求和后作差强转成字符

// 方法二:求和后作差强转成字符
static char FindAddedChar2(string s, string t)
{
    // 初始化变量用于存储字符串 t 的字符总和
    int tSum = 0;
    foreach (var item in t)
    {
        // 将字符串 t 的每个字符的 ASCII 值累加到总和中
        tSum += item;
    }

    // 初始化变量用于存储字符串 s 的字符总和
    int sSum = 0;
    foreach (var item in s)
    {
        // 将字符串 s 的每个字符的 ASCII 值累加到总和中
        sSum += item;
    }

    // 返回字符总和的差值,将其强制转换为字符,即在字符串 t 中被添加的字符
    return (char)(tSum - sSum);
}

389.3 代码

using System;
using System.Collections.Generic;

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

        // 给定两个字符串 s 和 t ,它们只包含小写字母。
        // 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
        // 请找出在 t 中被添加的字母。

        // 示例 1:
        // 输入:s = "abcd", t = "abcde"
        // 输出:"e"
        // 解释:'e' 是那个被添加的字母。

        // 示例 2:
        // 输入:s = "", t = "y"
        // 输出:"y"

        // 提示:
        // 0 <= s.length <= 1000
        // t.length == s.length + 1
        // s 和 t 只包含小写字母

        #endregion

        #region 测试

        // 示例 1
        string s1 = "abcd";
        string t1 = "abcde";
        char result1 = FindAddedChar1(s1, t1);
        Console.WriteLine($"示例1 方法1 输出:{result1}");
        char result1_2 = FindAddedChar2(s1, t1);
        Console.WriteLine($"示例1 方法2 输出:{result1_2}");

        // 示例 2
        string s2 = "";
        string t2 = "y";
        char result2 = FindAddedChar1(s2, t2);
        Console.WriteLine($"示例2 方法1 输出:{result2}");
        char result2_2 = FindAddedChar2(s2, t2);
        Console.WriteLine($"示例2 方法2 输出:{result2_2}");

        #endregion
    }

    #region 答案

    // 方法一:List添加后移除
    static char FindAddedChar1(string s, string t)
    {
        // 创建一个字符列表用于存储字符串 t 的每个字符
        List<char> tList = new List<char>();
        foreach (var item in t)
        {
            // 将字符串 t 的每个字符添加到列表中
            tList.Add(item);
        }

        // 遍历字符串 s 的每个字符
        foreach (var item in s)
        {
            // 如果列表中包含当前字符,移除列表中的该字符
            if (tList.Contains(item))
            {
                tList.Remove(item);
            }
        }

        // 返回列表中剩余的字符,即在字符串 t 中被添加的字符
        return tList[0];
    }

    // 方法二:求和后作差强转成字符
    static char FindAddedChar2(string s, string t)
    {
        // 初始化变量用于存储字符串 t 的字符总和
        int tSum = 0;
        foreach (var item in t)
        {
            // 将字符串 t 的每个字符的 ASCII 值累加到总和中
            tSum += item;
        }

        // 初始化变量用于存储字符串 s 的字符总和
        int sSum = 0;
        foreach (var item in s)
        {
            // 将字符串 s 的每个字符的 ASCII 值累加到总和中
            sSum += item;
        }

        // 返回字符总和的差值,将其强制转换为字符,即在字符串 t 中被添加的字符
        return (char)(tSum - sSum);
    }

    #endregion
}

389.4 运行结果

示例1 方法1 输出:e
示例1 方法2 输出:e
示例2 方法1 输出:y
示例2 方法2 输出:y


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

×

喜欢就点赞,疼爱就打赏