Checking if two strings are permutations of each other

前端 未结 30 1090
感情败类
感情败类 2020-12-05 08:19

How to determine if two strings are permutations of each other

30条回答
  •  孤街浪徒
    2020-12-05 09:10

    This is an O(N) solution, in which N is the length of the shorter string. It has a disadvantage, which is that only ASCII characters are acceptable. If we want better applicability, we may substitute a hash table for the int charNums[]. But it also means C wouldn't be a good choice, coz' there is no standard hash table implementation for C.

    int is_permutation(char *s1, char *s2)
    {
        if ((NULL == s1) ||
            (NULL == s2)) {
            return false;
        }
    
        int static const
        _capacity = 256;    // Assumption
        int
        charNums[_capacity] = {0};
        char
        *cRef1 = s1,
        *cRef2 = s2;
        while ('\0' != *cRef1 && '\0' != *cRef2) {
            charNums[*cRef1] += 1;
            charNums[*cRef2] -= 1;
            cRef1++;
            cRef2++;
        }
    
        if ('\0' != *cRef1 || '\0'  != *cRef2) {
            return false;
        }
    
        for (int i = 0; i < _capacity; i++) {
            if (0 != charNums[i]) {
                return false;
            }
        }
    
        return true;
    }
    

提交回复
热议问题