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


    题意

    看一个字符串是否为另一个字符串的重新排列

    思路

    • 显然的一种情况是两个字符串的长度不一样的时候,肯定不是重排。
    • 1️⃣排序法。如果是重排,那么两个字符串排序后应该是一样的字符串。时间复杂度是(O(nlogn))
    • 2️⃣用空间换时间,题目没说是Ascii还是Unicode,默认按Ascii处理。如果说是字符串的重排,那么肯定用到的字母和对应的个数应该是一致的,读入s1字符串的时候进行统计,读入s2的时候删去,最后应该是全为0才对,时间复杂度是(O(n))

    代码(排序法)

    class Solution {
    public:
        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;
        }
    };
    

    代码(空间换时间)

    class Solution {
    public:
        bool CheckPermutation(string s1, string s2) {
            if(s1.size() != s2.size()) {
                return false;
            }
            vector<int> hash_table(256, 0);
            for(auto ch: s1) {
                hash_table[ch - '0']++;
            }
            for(auto ch: s2) {
                hash_table[ch - '0']--;
            }
            for(auto i: hash_table) {
                if(i != 0) {
                    return false;
                }
            }
            return true;
        }
    };
    
    如有转载,请注明出处QAQ
  • 相关阅读:
    oracle函数查询数据字典
    股票市场不是年轻人应该去的地方
    惊蟄
    大学问
    教条示龙场诸生
    生成器表达式
    三次锁定(文件加强版)
    文件的增删改查
    Python试题(1)
    Python入门(1)
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/14436526.html
Copyright © 2020-2023  润新知