zoukankan      html  css  js  c++  java
  • 两个字符串“相等”

    快速比较两个字符串是否“相等”

    两个字符串相等:字符串中的每个字符出现的次数都相等。

    “abbcc”与“cbabc”相等,因为两个字符串中‘a’都出现了1次,‘b’出现2次,‘c’出现2次。

     其中一种方法是使用散列表,散列表的经典应用是字典,以单词为关键字,其解释为值;

    对于本文的问题, 将字符作为关键字, 其出现次数为值。

     可以用unordered_map:

    #include<iostream>
    #include<string>
    #include<unordered_map>
    using namespace std;
    
    bool isEqual(const string &s1,const string &s2){
        unordered_map<char,int> hash;
    
        int s1_length=s1.length();
        int s2_length=s2.length();
        if (s1_length != s2_length)
            return false;
    
        for(int i=0;i<=s1_length;++i){
            ++hash[s1[i]];
            --hash[s2[i]];
        }
    
        for(auto i=hash.cbegin();i!=hash.cend();++i){
            if(i->second!=0)
                return false;
        }
        return true;
    }
    
    int main(){
        cout<<isEqual("aabbccd","aabbccd")<<endl;
        return 1;
    }

     如果字符是标准的ASCII 码的话可以直接用字符的码值作为索引:

    #include<iostream>
    #include<string>
    using namespace std;
    bool isEqual(const string &s1,const string &s2){
        int hashtable[128];
        for(int i=0;i<128;++i){
            hashtable[i]=0;
        }
        
        int s1_length=s1.length();
        int s2_length=s2.length();
        if (s1_length != s2_length)
            return false;
            
        for(int i=0;i<=s1_length;++i){
            ++hashtable[s1[i]];
            --hashtable[s2[i]];
        }
        
        for(int i=0;i<128;++i){
            if(hashtable[i]!=0)
                return false;
        }
        return true;
    }

    若有错误或纰漏,还望指出。

  • 相关阅读:
    bzoj1051(明星奶牛)
    hdu4081(秦始皇的道路系统)
    bzoj2330(差分约束)
    JPA & Hibernate 注解
    Hibernate中对象的3种状态:瞬时态、持久态、脱管态
    Spring Data JAP 多个不是必填的查询条件处理
    设计模式
    Java远程方法调用(RMI)
    Javascript注意事项四【提高循环性能的策略】
    Javascript注意事项三【使用假值】
  • 原文地址:https://www.cnblogs.com/iois/p/4032095.html
Copyright © 2011-2022 走看看