|
5 | 5 | *&---------------------------------------------------------------------* |
6 | 6 | REPORT z_lc_find_words_from_char. |
7 | 7 |
|
| 8 | +*⏱ Time Complexity |
| 9 | +*Let: |
| 10 | +*- n = number of words (lt_words) |
| 11 | +*- k = average word length |
| 12 | +*- m = number of input characters in lt_chars |
| 13 | +*Step-by-step: |
| 14 | +*- Initialize lt_char_val with 26 alphabet entries: |
| 15 | +*- DO 26 TIMES → O(1) |
| 16 | +*- Build frequency table from lt_chars: |
| 17 | +*- Loop over m elements → each READ is O(1) in a hashed table |
| 18 | +*✅ Total: O(m) |
| 19 | +*- Main word loop (LOOP AT lt_words): |
| 20 | +*- Runs n times |
| 21 | +*- Each iteration: |
| 22 | +*- Copies the character frequency table → O(1) (fixed 26 entries) |
| 23 | +*- Inner WHILE over each character in the word → O(k) |
| 24 | +*- Each READ into lt_char_temp → O(1) ✅ Total: O(n × k) |
| 25 | +*Overall: |
| 26 | +*Total Time Complexity: O(m + n × k) |
| 27 | +*(Most often dominated by n × k if m is small) |
| 28 | + |
| 29 | +*🧠 Space Complexity |
| 30 | +*- lt_char_val: Fixed 26-letter hash → O(1) |
| 31 | +*- lt_char_temp: Copy of lt_char_val → still O(1) |
| 32 | +*- lt_words: Input of n words with k characters each → O(n × k) |
| 33 | +*- lt_chars: Input of m characters → O(m) |
| 34 | +*Total Space Complexity: O(n × k + m) |
| 35 | +*(Driven by input, not auxiliary structures) |
| 36 | + |
8 | 37 |
|
9 | 38 |
|
10 | 39 | TYPES: tty_words TYPE STANDARD TABLE OF string WITH EMPTY KEY, |
@@ -79,3 +108,64 @@ LOOP AT lt_words ASSIGNING FIELD-SYMBOL(<lfs_words>). |
79 | 108 | WRITE : <lfs_words>. |
80 | 109 | ENDIF. |
81 | 110 | ENDLOOP. |
| 111 | +*--------------------------------------------------------------------* |
| 112 | + |
| 113 | +*TYPES: BEGIN OF ty_freq, |
| 114 | +* char TYPE c, |
| 115 | +* val TYPE i, |
| 116 | +* END OF ty_freq. |
| 117 | +* |
| 118 | +*TYPES: tty_words TYPE STANDARD TABLE OF string WITH EMPTY KEY, |
| 119 | +* tty_chars TYPE STANDARD TABLE OF c WITH EMPTY KEY. |
| 120 | +* |
| 121 | +*DATA(lt_words) = VALUE tty_words( ( `coding` ) ( `apple`) ( `google`) ( `sreenith`) ( `pop`) ). |
| 122 | +*DATA(lt_chars) = VALUE tty_chars( ( 'a' ) ( 'e') ( 'g') ( 'o') ( 'p') ( 'o') ( 'l') ( 'p') ( 'e') ( 'g') ). |
| 123 | +* |
| 124 | +*DATA: lt_freq TYPE HASHED TABLE OF ty_freq WITH UNIQUE KEY char, |
| 125 | +* ls_freq TYPE ty_freq. |
| 126 | +* |
| 127 | +*" Initialize frequency table |
| 128 | +*LOOP AT lt_chars INTO DATA(ch). |
| 129 | +* READ TABLE lt_freq ASSIGNING FIELD-SYMBOL(<fs_freq>) WITH KEY char = ch. |
| 130 | +* IF sy-subrc = 0. |
| 131 | +* <fs_freq>-val += 1. |
| 132 | +* ELSE. |
| 133 | +* ls_freq-char = ch. |
| 134 | +* ls_freq-val = 1. |
| 135 | +* INSERT ls_freq INTO TABLE lt_freq. |
| 136 | +* ENDIF. |
| 137 | +*ENDLOOP. |
| 138 | +* |
| 139 | +*" Process each word |
| 140 | +*LOOP AT lt_words INTO DATA(word). |
| 141 | +* DATA word_freq TYPE HASHED TABLE OF ty_freq WITH UNIQUE KEY char. |
| 142 | +* CLEAR word_freq. |
| 143 | +* |
| 144 | +* DATA is_valid TYPE abap_bool VALUE abap_true. |
| 145 | +* |
| 146 | +* DO strlen( word ) TIMES. |
| 147 | +* DATA(lv_i) = sy-index - 1. |
| 148 | +* DATA(lv_char) = word+lv_i(1). |
| 149 | +* |
| 150 | +* " Count character for this word |
| 151 | +* READ TABLE word_freq ASSIGNING FIELD-SYMBOL(<fs_w>) WITH KEY char = lv_char. |
| 152 | +* IF sy-subrc = 0. |
| 153 | +* <fs_w>-val += 1. |
| 154 | +* ELSE. |
| 155 | +* ls_freq-char = lv_char. |
| 156 | +* ls_freq-val = 1. |
| 157 | +* INSERT ls_freq INTO TABLE word_freq. |
| 158 | +* ENDIF. |
| 159 | +* |
| 160 | +* " Compare with available character frequency |
| 161 | +* READ TABLE lt_freq INTO DATA(ls_avail) WITH KEY char = lv_char. |
| 162 | +* IF sy-subrc <> 0 OR ls_avail-val < word_freq[ KEY char = lv_char ]-val. |
| 163 | +* is_valid = abap_false. |
| 164 | +* EXIT. |
| 165 | +* ENDIF. |
| 166 | +* ENDDO. |
| 167 | +* |
| 168 | +* IF is_valid = abap_true. |
| 169 | +* WRITE: / word. |
| 170 | +* ENDIF. |
| 171 | +*ENDLOOP. |
0 commit comments