Guest User

main.c

a guest
Jun 27th, 2023
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.43 KB | Source Code | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. // void sort(char *s) {
  5. //     size_t n = strlen(s);
  6. //     for (size_t i = 0 ; i < n - 1; ++i) {
  7. //         for (size_t j = i + 1 ; j < n; ++j) {
  8. //             if (s[i] > s[j]) {
  9. //                 char temp = s[i];
  10. //                 s[i] = s[j];
  11. //                 s[j] = temp;
  12. //             }
  13. //         }
  14. //     }
  15. // }
  16.  
  17. // int is_permutation(char *s1, char *s2) {
  18. //     if (strlen(s1) != strlen(s2)) {
  19. //         // Costs: o(n)
  20. //         return 0;
  21. //     }
  22. //     // Costs: o(nlogn)
  23. //     sort(s1);
  24. //     // Costs: o(nlogn)
  25. //     sort(s2);
  26. //     return strcmp(s1, s2) == 0;
  27. //     // o(n) + o(nlogn) + o(nlogn) = o(nlogn)
  28. // }
  29.  
  30. int is_permutation(const char *s1, const char *s2) {
  31.     if (strlen(s1) != strlen(s2)) {
  32.         // O(n)
  33.         return 0;
  34.     }
  35.  
  36.     char letters[256] = { 0 };
  37.     for (size_t i = 0; i < strlen(s1); ++i) {
  38.         // O(n)
  39.         letters[s1[i]]++;
  40.     }
  41.     for (size_t i = 0; i < strlen(s2); ++i) {
  42.         // O(n)
  43.         letters[s2[i]]--;
  44.         if (letters[s2[i]] < 0) {
  45.             return 0;
  46.         }
  47.     }
  48.     return 1;
  49.     // O(n)
  50. }
  51.  
  52. int main(int argc, char **argv) {
  53.     if (argc != 3) {
  54.         printf("Usage: %s <str1> <str2>\n", argv[0]);
  55.         return 1;
  56.     }
  57.     if (is_permutation(argv[1], argv[2])) {
  58.         printf("This is a permutation :)\n");
  59.     } else {
  60.         printf(":(\n");
  61.     }
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment