aboutsummaryrefslogtreecommitdiff
path: root/is_subseq.c
blob: 35ddd0916ae8d08bff57a7fc2accf82502695aa0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 392. Is Subsequence
#include <stdbool.h>
#include <stdio.h>

/*
 * given two strings 's' and 't', return 'true' if 's' is a subsequnce of 't' or
 * 'false' otherwise. a subsequnce of a string is a new string that is formed
 * from the original string by deleting some (can be none) of the characters
 * without disturbing the relative positions of the remaining characters (ie.
 * "ace" is a subsequnce of "abcde", while "aec" is not).
 */

bool isSubsequence(char *s, char *t) {
  int s_idx = 0, t_idx = 0;
  while (s[s_idx] != '\0') {
    while ((t[t_idx] != '\0') & (t[t_idx] != s[s_idx]))
      t_idx++;
    if (t[t_idx] == '\0')
      return false;
    t_idx++;
    s_idx++;
  }
  return true;
}

int main() {
  char s1[] = {"abc"}, s2[] = {"axc"};
  char t1[] = {"ahbgdc"}, t2[] = {"ahbgdc"};
  printf("%d\n", isSubsequence(s1, t1)); // expect: 1
  printf("%d\n", isSubsequence(s2, t2)); // expect: 0
}