50145. Sub Linked List
難度:3/51
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "sub.h"
// typedef struct Node{
// char c;
// struct Node *next;
// } Node;
int check_same(Node *t_ptr, Node *pattern){
while(t_ptr != NULL && pattern != NULL){
if(t_ptr->c != pattern->c) return 0;
t_ptr = t_ptr->next, pattern = pattern->next;
}
if(t_ptr == NULL) return 0;
else return 1;
}
int get_size(Node* p){
int n = 0;
while(p != NULL) p = p->next, n++;
return n;
}
void substring(Node* text, Node* pattern){
int cnt = 0;
Node* p_ptr = pattern;
for(Node* t_ptr = text; t_ptr != NULL; t_ptr = t_ptr->next){
if(check_same(t_ptr, pattern)){
int len = get_size(pattern);
printf("%d\n", (cnt + cnt + len - 1) * (len) / 2 );
return;
}
cnt++;
}
}
void subsequence(Node* text, Node* pattern){
int ans = 0;
int cnt = 0;
Node* p_ptr = pattern;
for(Node* t_ptr = text; t_ptr != NULL; t_ptr = t_ptr->next){
if(t_ptr->c == p_ptr->c) p_ptr = p_ptr->next, ans += cnt;
if(p_ptr == NULL){
printf("%d\n", ans);
return;
}
cnt++;
}
}