• 两个字符串“相等”


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

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

    “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;
    }

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

  • 相关阅读:
    第二阶段冲刺第七天,6月6日。
    第二阶段冲刺第六天,6月5日。
    第二阶段冲刺第五天,6月4日。
    第二阶段冲刺第四天,6月3日。
    第二阶段冲刺第三天,6月2日。
    第二阶段冲刺第二天,6月1日。
    垃圾收集器与内存分配策略(1)
    OutOfMemoryError异常
    对象访问
    java内存区域与内存溢出异常(2)
  • 原文地址:https://www.cnblogs.com/iois/p/4032095.html
Copyright © 2020-2023  润新知