@@ -22,74 +22,74 @@ Return
22
22
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
23
23
*/
24
24
typedef struct {
25
- int start ;
26
- int len ;
25
+ int start ;
26
+ int len ;
27
27
} buff_t ;
28
28
typedef struct {
29
- char * * * p ;
30
- int * csz ;
31
- int psz ;
32
- int pn ;
29
+ char * * * p ;
30
+ int * csz ;
31
+ int psz ;
32
+ int pn ;
33
33
} res_t ;
34
34
void add2res (res_t * res , const char * s , buff_t * buff , int d ) {
35
- int i ;
36
- char * str , * * pp ;
37
- if (res -> psz == res -> pn ) {
38
- res -> psz = (res -> psz == 0 ) ? 10 : res -> psz * 2 ;
39
- res -> p = realloc (res -> p , res -> psz * sizeof (char * * ));
40
- res -> csz = realloc (res -> csz , res -> psz * sizeof (int ));
41
- //assert(res->p && res->psz);
42
- }
43
- pp = malloc (d * sizeof (char * ));
44
- //assert(pp);
45
- for (i = 0 ; i < d ; i ++ ) {
46
- str = strndup (& s [buff [i ].start ], buff [i ].len );
47
- pp [i ] = str ;
48
- }
49
- res -> p [res -> pn ] = pp ;
50
- res -> csz [res -> pn ++ ] = d ;
35
+ int i ;
36
+ char * str , * * pp ;
37
+ if (res -> psz == res -> pn ) {
38
+ res -> psz = (res -> psz == 0 ) ? 10 : res -> psz * 2 ;
39
+ res -> p = realloc (res -> p , res -> psz * sizeof (char * * ));
40
+ res -> csz = realloc (res -> csz , res -> psz * sizeof (int ));
41
+ //assert(res->p && res->psz);
42
+ }
43
+ pp = malloc (d * sizeof (char * ));
44
+ //assert(pp);
45
+ for (i = 0 ; i < d ; i ++ ) {
46
+ str = strndup (& s [buff [i ].start ], buff [i ].len );
47
+ pp [i ] = str ;
48
+ }
49
+ res -> p [res -> pn ] = pp ;
50
+ res -> csz [res -> pn ++ ] = d ;
51
51
}
52
52
int is_palindrome (const char * s , int start , int end ) {
53
- while (start < end ) {
54
- if (s [start ] != s [end ]) return 0 ;
55
- start ++ ;
56
- end -- ;
57
- }
58
- return 1 ;
53
+ while (start < end ) {
54
+ if (s [start ] != s [end ]) return 0 ;
55
+ start ++ ;
56
+ end -- ;
57
+ }
58
+ return 1 ;
59
59
}
60
60
void bt (const char * s , int start , int sz , buff_t * buff , int d , res_t * res ) {
61
- int i ;
62
- if (start == sz ) {
63
- // done, save result
64
- add2res (res , s , buff , d );
65
- return ;
66
- }
67
- for (i = start ; i < sz ; i ++ ) {
68
- if (is_palindrome (s , start , i )) {
69
- buff [d ].start = start ;
70
- buff [d ].len = i - start + 1 ;
71
- bt (s , i + 1 , sz , buff , d + 1 , res );
72
- }
73
- }
61
+ int i ;
62
+ if (start == sz ) {
63
+ // done, save result
64
+ add2res (res , s , buff , d );
65
+ return ;
66
+ }
67
+ for (i = start ; i < sz ; i ++ ) {
68
+ if (is_palindrome (s , start , i )) {
69
+ buff [d ].start = start ;
70
+ buff [d ].len = i - start + 1 ;
71
+ bt (s , i + 1 , sz , buff , d + 1 , res );
72
+ }
73
+ }
74
74
}
75
75
char * * * partition (char * s , int * * columnSizes , int * returnSize ) {
76
- res_t res = { 0 };
77
- buff_t * buff ;
78
- int sz ;
79
-
80
- sz = strlen (s );
81
-
82
- buff = malloc (sz * sizeof (buff_t ));
83
- //assert(buff);
84
-
85
- bt (s , 0 , sz , buff , 0 , & res );
86
-
87
- //free(buff);
88
-
89
- * columnSizes = res .csz ;
90
- * returnSize = res .pn ;
91
-
92
- return res .p ;
76
+ res_t res = { 0 };
77
+ buff_t * buff ;
78
+ int sz ;
79
+
80
+ sz = strlen (s );
81
+
82
+ buff = malloc (sz * sizeof (buff_t ));
83
+ //assert(buff);
84
+
85
+ bt (s , 0 , sz , buff , 0 , & res );
86
+
87
+ //free(buff);
88
+
89
+ * columnSizes = res .csz ;
90
+ * returnSize = res .pn ;
91
+
92
+ return res .p ;
93
93
}
94
94
95
95
0 commit comments