zoukankan      html  css  js  c++  java
  • 2020-12-18 找不同

    题目


    题解

    方法一:哈希表

    建立一个哈希表,以字符为键,以整数为值(初值为0),对于字符串(t)中的每个字符,将哈希表以该字符为键的表项的值加1;然后对于字符串(s)的每个字符,将哈希表中以该字符为键的表项的值减1;如此一来在哈希表中只有以新增字符为键的表项的值大于0,返回该字符。

    class Solution {
    public:
        char findTheDifference(string s, string t) {
            unordered_map<char, int> imap;
            int len = s.size();
            for (int i = 0; i < len; ++i) {
                imap[t[i]] += 1;
                imap[s[i]] -= 1;
            }
            imap[t[len]] += 1;
            
            for (int i = 0; i < len+1; ++i) {
                if(imap[t[i]] > 0)
                    return t[i];
            }
    
            return ' ';
        }
    };
    

    方法二:两和之差

    使用两个变量sum_ssum_t分别记录字符串(s)与字符串(t)的所有字符的(ASCII)值之和,返回以sum_ssum_t的差值。

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

    方法三:位运算

    由于字符串(s)与字符串(t)的唯一区别在于新增字符,那么可对两字符串的所有与字符进行异或,最后的结果便是新增字符。这是为什么呢?
    自身异或结果为0:ch ^ ch = 0,并且异或服从交换律:ch1 ^ ch2 ^ ch3 = ch1 ^ ch3 ^ ch2
    以字符串ab和字符串abc来举例,二者所有元素的异或为:a^b^a^b^c,根据交换律可写成a^a^b^b^c,根据自身异或结果为0可写成0^c,其结果为c,这正是新增的字符。

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

    总结

    做完题目后,我去查找“位运算为什么效率更高?”这个问题,我发现:位运算不一定就更比常规的程序执行效率更优,这种“奇技淫巧”编译器会自动给你做了。
    https://www.zhihu.com/question/364629487

    CS专业在读,热爱编程。
    专业之外,喜欢阅读,尤爱哲学、金庸、马尔克斯。
  • 相关阅读:
    深入浅出 消息队列 ActiveMQ
    win7系统如何恢复administrator用户
    为什么新建的管理员账号权限没有Administrator大?
    关于maven-jetty-plugin 自动重启问题
    jquery parent() parents() closest()区别
    【JEECG技术文档】JEECG部门管理员操作手册
    【JEECG技术文档】JEECG高级查询构造器使用说明
    【JEECG技术文档】数据权限自定义SQL表达式用法说明
    JEECG 3.7.2版本发布,企业级JAVA快速开发平台
    jeecg好用吗,看看大家的评价
  • 原文地址:https://www.cnblogs.com/jmhwsrr/p/14156776.html
Copyright © 2011-2022 走看看