389.找不同
389.1 题目
给定两个字符串 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
只包含小写字母
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