Permutations of Strings

  • + 0 comments
     // Step 1: Find the largest index k such that s[k] < s[k + 1]
        int k = -1;
        for (int i = 0; i < n - 1; i++) {
            if (strcmp(s[i], s[i + 1]) < 0) {
                k = i;
            }
        }
        if (k == -1) {
            return 0; // No next permutation
        }
    
        // Step 2: Find the largest index l greater than k such that s[k] < s[l]
        int l = -1;
        for (int i = k + 1; i < n; i++) {
            if (strcmp(s[k], s[i]) < 0) {
                l = i;
            }
        }
    
        // Step 3: Swap the value of s[k] with that of s[l]
        char *temp = s[k];
        s[k] = s[l];
        s[l] = temp;
    
        // Step 4: Reverse the sequence from s[k + 1] to s[n - 1]
        for (int i = k + 1, j = n - 1; i < j; i++, j--) {
            temp = s[i];
            s[i] = s[j];
            s[j] = temp;
        }
    
        return 1; // Next permutation exists