Skip to content

Commit d2b40ed

Browse files
committed
sub query
1 parent 29ba9ff commit d2b40ed

12 files changed

+690
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
*&---------------------------------------------------------------------*
2+
*& Report Z_LC_PALINDROME_INTEGER
3+
*&---------------------------------------------------------------------*
4+
*&
5+
*&---------------------------------------------------------------------*
6+
REPORT z_lc_palindrome_integer.
7+
*Time complexity O(n).
8+
*Given an integer x, return true if x is palindrome integer.
9+
10+
*An integer is a palindrome when it reads the same backward as forward. For example, 121 is palindrome while 123 is not.
11+
12+
*DATA lv_num TYPE i VALUE 1221.
13+
PARAMETERS: lv_num TYPE i.
14+
15+
CLASS lcl_pali DEFINITION.
16+
PUBLIC SECTION.
17+
METHODS m_palicheck IMPORTING num TYPE i RETURNING VALUE(flag) TYPE boolean.
18+
ENDCLASS.
19+
20+
START-OF-SELECTION.
21+
22+
DATA(lv_ref) = NEW lcl_pali( ).
23+
IF lv_ref IS NOT INITIAL.
24+
DATA(x) = lv_ref->m_palicheck( EXPORTING num = lv_num ).
25+
IF x EQ abap_true .
26+
WRITE 'Number is Palindrome'.
27+
ELSE.
28+
WRITE 'Number is not Palindrome'.
29+
ENDIF.
30+
ENDIF.
31+
32+
CLASS lcl_pali IMPLEMENTATION.
33+
34+
METHOD m_palicheck .
35+
IF num < 0.
36+
flag = abap_false.
37+
RETURN.
38+
ENDIF.
39+
DATA(reverse) = 0.
40+
DATA(n) = num.
41+
WHILE n > 0.
42+
reverse = reverse * 10 + n MOD 10.
43+
n = n / 10.
44+
ENDWHILE.
45+
IF reverse = num.
46+
flag = abap_true.
47+
ELSE.
48+
flag = abap_false.
49+
ENDIF.
50+
ENDMETHOD.
51+
52+
ENDCLASS.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
3+
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
4+
<asx:values>
5+
<PROGDIR>
6+
<NAME>Z_LC_PALINDROME_INTEGER</NAME>
7+
<SUBC>1</SUBC>
8+
<RLOAD>E</RLOAD>
9+
<FIXPT>X</FIXPT>
10+
<UCCHECK>X</UCCHECK>
11+
</PROGDIR>
12+
<TPOOL>
13+
<item>
14+
<ID>R</ID>
15+
<ENTRY>Report Z_LC_PALINDROME_INTEGER</ENTRY>
16+
<LENGTH>30</LENGTH>
17+
</item>
18+
</TPOOL>
19+
</asx:values>
20+
</asx:abap>
21+
</abapGit>
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
*&---------------------------------------------------------------------*
2+
*& Report Z_LC_PALINDROME_PERMUTATION
3+
*&---------------------------------------------------------------------*
4+
*&
5+
*&---------------------------------------------------------------------*
6+
REPORT z_lc_palindrome_permutation.
7+
8+
9+
CLASS lcl_main DEFINITION.
10+
PUBLIC SECTION.
11+
TYPES: tt_array TYPE STANDARD TABLE OF c WITH DEFAULT KEY.
12+
DATA: mt_array TYPE tt_array,
13+
mt_permute TYPE SORTED TABLE OF string WITH UNIQUE DEFAULT KEY.
14+
METHODS: string_to_array IMPORTING str TYPE string
15+
RETURNING VALUE(rt_array) TYPE tt_array,
16+
array_to_string IMPORTING im_array TYPE tt_array
17+
RETURNING VALUE(rv_str) TYPE string,
18+
calc_permutations IMPORTING im_str TYPE string
19+
left TYPE i
20+
right TYPE i,
21+
check_palindrome IMPORTING im_str TYPE string
22+
RETURNING VALUE(rv_is_palindrome) TYPE boolean,
23+
swap IMPORTING im_str TYPE string
24+
start_index TYPE i
25+
target_index TYPE i
26+
RETURNING VALUE(rv_str) TYPE string.
27+
28+
29+
ENDCLASS.
30+
31+
CLASS lcl_main IMPLEMENTATION.
32+
METHOD string_to_array.
33+
DATA: lv_index TYPE i.
34+
DATA: lt_str TYPE TABLE OF c.
35+
DATA: lv_length TYPE i.
36+
37+
lv_length = strlen( str ).
38+
39+
WHILE lv_index < strlen( str ).
40+
41+
DATA(lv_char) = str+lv_index(1).
42+
APPEND lv_char TO lt_str.
43+
ADD 1 TO lv_index.
44+
ENDWHILE.
45+
46+
rt_array = lt_str.
47+
ENDMETHOD.
48+
49+
METHOD calc_permutations.
50+
51+
IF left = right.
52+
IF check_palindrome( im_str ) IS NOT INITIAL.
53+
INSERT im_str INTO TABLE mt_permute.
54+
ENDIF.
55+
ELSE.
56+
DATA(i) = left.
57+
WHILE i <= right.
58+
59+
DATA(lv_str) = swap( EXPORTING im_str = im_str
60+
start_index = left
61+
target_index = i ).
62+
DATA(lv_left) = left + 1.
63+
calc_permutations( EXPORTING im_str = lv_str
64+
left = lv_left
65+
right = right ).
66+
i = i + 1.
67+
ENDWHILE.
68+
ENDIF.
69+
70+
ENDMETHOD.
71+
72+
METHOD check_palindrome.
73+
DATA: lv_reverse TYPE string.
74+
75+
lv_reverse = reverse( im_str ).
76+
77+
IF to_lower( im_str ) = to_lower( lv_reverse ).
78+
rv_is_palindrome = abap_true.
79+
ELSE.
80+
rv_is_palindrome = abap_false.
81+
ENDIF.
82+
ENDMETHOD.
83+
84+
METHOD array_to_string.
85+
LOOP AT im_array INTO DATA(lv_char).
86+
rv_str = rv_str && lv_char.
87+
ENDLOOP.
88+
ENDMETHOD.
89+
90+
METHOD swap.
91+
DATA: lv_temp TYPE c.
92+
DATA: lt_str TYPE TABLE OF c.
93+
94+
lt_str = string_to_array( im_str ).
95+
lv_temp = lt_str[ start_index ].
96+
lt_str[ start_index ] = lt_str[ target_index ].
97+
lt_str[ target_index ] = lv_temp.
98+
99+
rv_str = array_to_string( lt_str ).
100+
101+
ENDMETHOD.
102+
ENDCLASS.
103+
104+
105+
START-OF-SELECTION.
106+
107+
DATA: lv_str TYPE string VALUE 'carerac'.
108+
DATA: lt_str TYPE TABLE OF c.
109+
DATA: lo_obj TYPE REF TO lcl_main.
110+
DATA: lv_last TYPE c.
111+
112+
CREATE OBJECT lo_obj.
113+
114+
lt_str = lo_obj->string_to_array( lv_str ).
115+
DATA(lv_len) = strlen( lv_str ).
116+
117+
lo_obj->calc_permutations( EXPORTING im_str = lv_str
118+
left = 1
119+
right = lv_len ).
120+
121+
BREAK-POINT.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
3+
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
4+
<asx:values>
5+
<PROGDIR>
6+
<NAME>Z_LC_PALINDROME_PERMUTATION</NAME>
7+
<SUBC>1</SUBC>
8+
<RLOAD>E</RLOAD>
9+
<FIXPT>X</FIXPT>
10+
<UCCHECK>X</UCCHECK>
11+
</PROGDIR>
12+
<TPOOL>
13+
<item>
14+
<ID>R</ID>
15+
<ENTRY>Program Z_LC_PALINDROME_PERMUTATION</ENTRY>
16+
<LENGTH>35</LENGTH>
17+
</item>
18+
</TPOOL>
19+
</asx:values>
20+
</asx:abap>
21+
</abapGit>

src/z_lc_remove_nth_node.prog.abap

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
*&---------------------------------------------------------------------*
2+
*& Report Z_LC_REMOVE_NTH_NODE
3+
*&---------------------------------------------------------------------*
4+
*&
5+
*&---------------------------------------------------------------------*
6+
REPORT z_lc_remove_nth_node.
7+
*Given the head of a linked list, remove the nth node from the end of the list and return its head.
8+
9+
*Constraints:
10+
11+
*The number of nodes in the list is sz.
12+
*1 <= sz <= 30
13+
*0 <= Node.val <= 100
14+
*1 <= n <= sz
15+
16+
*Follow up: Could you do this in one pass?
17+
18+
*Time Complexity : T(n)
19+
20+
TYPES: BEGIN OF ty_node ,
21+
val TYPE i,
22+
next TYPE REF TO data,
23+
END OF ty_node.
24+
DATA root TYPE REF TO ty_node.
25+
DATA temp TYPE REF TO ty_node.
26+
TYPES ty_array TYPE STANDARD TABLE OF i WITH EMPTY KEY.
27+
28+
DATA(a) = VALUE ty_array( ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ).
29+
DATA(n) = 3.
30+
CLASS lcl_ll DEFINITION .
31+
PUBLIC SECTION .
32+
METHODS: m_build_ll IMPORTING data TYPE i CHANGING head TYPE REF TO ty_node.
33+
METHODS: m_traverse_ll IMPORTING head TYPE REF TO ty_node RETURNING VALUE(x) TYPE i.
34+
METHODS: m_delete_node IMPORTING place TYPE i head TYPE REF TO ty_node RETURNING VALUE(new) TYPE REF TO ty_node.
35+
ENDCLASS.
36+
37+
38+
START-OF-SELECTION.
39+
DATA(lv_ref) = NEW lcl_ll( ).
40+
IF lv_ref IS NOT INITIAL.
41+
LOOP AT a INTO DATA(ls).
42+
lv_ref->m_build_ll( EXPORTING data = ls CHANGING head = root ).
43+
ENDLOOP.
44+
DATA(l) = lv_ref->m_traverse_ll( EXPORTING head = root ).
45+
46+
temp = lv_ref->m_delete_node( EXPORTING place = ( l - n ) head = root ).
47+
WRITE: /.
48+
49+
DATA(dl) = lv_ref->m_traverse_ll( EXPORTING head = temp ).
50+
51+
ENDIF.
52+
CLASS lcl_ll IMPLEMENTATION.
53+
METHOD m_build_ll.
54+
DATA p TYPE REF TO ty_node.
55+
56+
IF head IS INITIAL.
57+
58+
CREATE DATA head.
59+
head->val = data.
60+
temp = head.
61+
ELSE.
62+
CREATE DATA p.
63+
p->val = data.
64+
temp->next = p.
65+
temp = p.
66+
ENDIF.
67+
ENDMETHOD.
68+
METHOD m_traverse_ll .
69+
temp = head.
70+
WHILE temp IS NOT INITIAL.
71+
x = x + 1.
72+
WRITE: temp->val , '->'.
73+
temp ?= temp->next.
74+
ENDWHILE.
75+
ENDMETHOD.
76+
METHOD m_delete_node.
77+
DATA p TYPE REF TO ty_node.
78+
DATA node_h TYPE REF TO ty_node.
79+
DATA node TYPE REF TO ty_node.
80+
FIELD-SYMBOLS <fs> TYPE ty_node.
81+
DATA(pi) = place.
82+
node_h = head.
83+
node = node_h.
84+
85+
"Edge case check
86+
IF place < - 1.
87+
new = node_h.
88+
RETURN.
89+
ENDIF.
90+
IF place < 2.
91+
* p = node_h.
92+
node_h ?= node_h->next.
93+
* free p.
94+
new = node_h.
95+
RETURN.
96+
ENDIF.
97+
98+
"Normal Scenarios
99+
WHILE pi > 1.
100+
node ?= node->next.
101+
pi = pi - 1.
102+
ENDWHILE.
103+
ASSIGN node->next->* TO <fs>.
104+
IF <fs> IS ASSIGNED.
105+
node->next = <fs>-next.
106+
ENDIF.
107+
new = node_h.
108+
FREE: p , node,node_h,<fs>.
109+
ENDMETHOD.
110+
ENDCLASS.

src/z_lc_remove_nth_node.prog.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
3+
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
4+
<asx:values>
5+
<PROGDIR>
6+
<NAME>Z_LC_REMOVE_NTH_NODE</NAME>
7+
<SUBC>1</SUBC>
8+
<RLOAD>E</RLOAD>
9+
<FIXPT>X</FIXPT>
10+
<UCCHECK>X</UCCHECK>
11+
</PROGDIR>
12+
<TPOOL>
13+
<item>
14+
<ID>R</ID>
15+
<ENTRY>Report Z_LC_REMOVE_NTH_NODE</ENTRY>
16+
<LENGTH>27</LENGTH>
17+
</item>
18+
</TPOOL>
19+
</asx:values>
20+
</asx:abap>
21+
</abapGit>

0 commit comments

Comments
 (0)