面试题 01.03. 判定是否互为字符重排

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

自己解--金典法1

 bool CheckPermutation(string s1, string s2) {
        if(s1.size() != s2.size())
            return false;
        sort(s1.begin(),s1.end());
        sort(s2.begin(),s2.end());
        for(int i = 0;i < s1.size();i++)
        {
            if(s1[i] != s2[i])
                return false;
        }
        return true;
    }

金典解

问清是否考虑大小写,考虑空白字符。


image.png
  bool CheckPermutation(string s1, string s2) {
        if(s1.size() != s2.size())
            return false;
        int acs[256] = {0};
        for(int i = 0;i < s1.size();i++)
        {
            int val = static_cast<int>(s1[i]);
            acs[val]++;
        }
        for(int i = 0;i < s2.size();i++)
        {
            int val = static_cast<int>(s2[i]);
            if(--acs[val] < 0)
                return false;
        }
        return true;
    }
//或
bool CheckPermutation(string s1, string s2) {
        if(s1.size() != s2.size())
            return false;
        int acs[256] = {0};
        for(int i = 0;i < s1.size();i++)
        {
            acs[s1[i]]++;
        }
        for(int i = 0;i < s2.size();i++)
        {
            if(--acs[s2[i]] < 0)
                return false;
        }
        return true;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,955评论 0 2
  • 本文首发于我的个人博客:尾尾部落 1. KMP 算法 谈到字符串问题,不得不提的就是 KMP 算法,它是用来解决字...
    繁著阅读 10,023评论 0 28
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 4,804评论 0 1
  • package cn.itcast_01;/* 字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。 ...
    蛋炒饭_By阅读 3,836评论 0 0
  • 《绝佳体验》由布鲁斯·莱夫勒和布赖恩·丘奇合著完成。他们在迪士尼工作多年,在此书中,他们为我们揭示了迪士尼乐园是如...
    程子若阅读 3,746评论 0 0

友情链接更多精彩内容