Every day a leetcode
题目来源:389. 找不同
解法1:排序+遍历
先将两个字符串排序,再比较,遇到不一样的字符就返回当前t的字符。
代码:
/*
* @lc app=leetcode.cn id=389 lang=cpp
*
* [389] 找不同
*/
// @lc code=start
class Solution
{
public:
char findTheDifference(string s, string t)
{
sort(s.begin(), s.end());
sort(t.begin(), t.end());
for (int i = 0; i < s.size(); i++)
if (s[i] != t[i])
return t[i];
return t[t.size() - 1];
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(nlogn),其中n是字符串t的长度。排序算法的时间复杂度为O(nlogn),遍历的时间复杂度为O(n),所以总的时间复杂度为O(nlogn)。
空间复杂度:O(1)。
解法2:计数
使用初始化为0的数组记录字符串t的各字符出现次数,再减去字符串s的各字符出现次数,留下的次数不为0字符即为答案。
代码:
/*
* @lc app=leetcode.cn id=389 lang=cpp
*
* [389] 找不同
*/
// @lc code=start
class Solution
{
public:
char findTheDifference(string s, string t)
{
int count_c[26];
memset(count_c, 0, 26 * sizeof(int));
for (int i = 0; i < t.size(); i++)
count_c[t[i] - 'a']++;
for (int i = 0; i < s.size(); i++)
count_c[s[i] - 'a']--;
for (int i = 0; i < 26; i++)
if (count_c[i])
return i + 'a';
return t[0];
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n+m),其中n是字符串s的长度,m是字符串t的长度。
空间复杂度:O(∣Σ∣),其中Σ=26,为小写字母字符集的长度。
解法3:求和
字符串t的ASCII码之和 - 字符串s的ASCII码之和即为答案。
代码:
/*
* @lc app=leetcode.cn id=389 lang=cpp
*
* [389] 找不同
*/
// @lc code=start
// class Solution
// {
// public:
// char findTheDifference(string s, string t)
// {
// int count_c[26];
// memset(count_c, 0, 26 * sizeof(int));
// for (int i = 0; i < t.size(); i++)
// count_c[t[i] - 'a']++;
// for (int i = 0; i < s.size(); i++)
// count_c[s[i] - 'a']--;
// for (int i = 0; i < 26; i++)
// if (count_c[i])
// return i + 'a';
// return t[0];
// }
// };
// class Solution
// {
// public:
// char findTheDifference(string s, string t)
// {
// sort(s.begin(), s.end());
// sort(t.begin(), t.end());
// for (int i = 0; i < s.size(); i++)
// if (s[i] != t[i])
// return t[i];
// return t[t.size() - 1];
// }
// };
class Solution
{
public:
char findTheDifference(string s, string t)
{
int sum = 0;
for (int i = 0; i < t.size(); i++)
sum += t[i];
for (int i = 0; i < s.size(); i++)
sum -= s[i];
return sum;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n+m),其中n是字符串s的长度,m是字符串t的长度。
空间复杂度:O(1)。