fork download
  1.  
  2. #include <stdio.h>
  3.  
  4. void printSubstring(char *start, int len) {
  5. char *p = start;
  6. while (len--) {
  7. putchar(*p);
  8. p++;
  9. }
  10. putchar('\n');
  11. }
  12.  
  13. char* longestUniqueSubstring(char *s, int *outLen) {
  14. char *start = s;
  15. char *end = s;
  16.  
  17. char *bestStart = s;
  18. int bestLen = 0;
  19.  
  20. while (*end != '\0') {
  21.  
  22. // check duplicate of *end in [start, end)
  23. char *p = start;
  24. while (p < end) {
  25. if (*p == *end) {
  26. // move start just after previous occurrence
  27. start = p + 1;
  28. break;
  29. }
  30. p++;
  31. }
  32.  
  33. int len = (end - start) + 1;
  34. if (len > bestLen) {
  35. bestLen = len;
  36. bestStart = start;
  37. }
  38.  
  39. end++;
  40. }
  41.  
  42. *outLen = bestLen;
  43. return bestStart;
  44. }
  45.  
  46. int main() {
  47. char str[] = "abcab p q r pqbcbb";
  48.  
  49. int len = 0;
  50. char *res = longestUniqueSubstring(str, &len);
  51.  
  52. printf("Longest substring = ");
  53. printSubstring(res, len);
  54.  
  55. return 0;
  56. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Longest substring = r pqbc