LeetCode 389. 找不同(位运算)
发布日期:2021-07-01 03:15:36 浏览次数:2 分类:技术文章

本文共 1328 字,大约阅读时间需要 4 分钟。

1. 题目

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

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

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

2. 解题

在这里插入图片描述

2.1 土办法,哈希map

class Solution {
public: char findTheDifference(string s, string t) {
unordered_map
m1; unordered_map
m2; int i; for(i = 0; i < s.size(); ++i) {
if(m1.find(s[i]) == m1.end()) m1[s[i]] = 1; else m1[s[i]]++; } for(i = 0; i < t.size(); ++i) {
if(m2.find(t[i]) == m2.end()) m2[t[i]] = 1; else m2[t[i]]++; } for(auto it = m2.begin(); it != m2.end(); ++it) {
auto iter = m1.find(it->first); if(iter == m1.end() || (iter != m1.end() && iter->second != it->second)) return it->first; } return 'a'; }};

2.2 位运算 ^ 异或

  • 两字符串的所有字符 全部异或
class Solution {
public: char findTheDifference(string s, string t) {
int i; char ch = 0; for(i = 0; i < s.size(); ++i) ch ^= s[i]^t[i]; ch ^= t[i]; return ch; }};

2.3 两字符串分别求和做差

class Solution {
public: char findTheDifference(string s, string t) {
int i,sum = 0; for(i = 0; i < s.size(); ++i) sum += t[i]-s[i]; sum += t[i]; return (char)sum; }};

三种方法,位运算最快

转载地址:https://michael.blog.csdn.net/article/details/101165255 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode 1078. Bigram 分词
下一篇:LeetCode 868. 二进制间距(位运算)

发表评论

最新留言

很好
[***.229.124.182]2024年04月21日 17时01分38秒