Substring and Subsequence
บทความนี้ จะอธิบายเรื่องของ Substring และ Subsequence ว่ามีความแตกต่างกันยังไง
เช่น ABCD มี Substring รวม 10 ตัว ได้แก่
A B C D
AB BC CD
ABC BCD
ABCD
ABCD มี Subsequence รวม 15 ตัว ได้แก่
A AB ABC ABD ABCD AC ACD AD
B BC BCD BD
C CD
D
บางครั้งอาจจะรวม Empty String เข้าเป็น Substring หรือ Subsequence ด้วยก็ได้
โดยสรุปคือ Substring ต้องติดกัน แต่ Subsequence ไม่จำเป็นต้องติดกันก็ได้
เช่น BD เป็น Subsequence ไม่เป็น Substring
ตัวอย่างการหา Palindrome Substring และ Palindrome Subsequence
ที่ยาวที่สุดของ ABCABACA
ABCABACA
xxxxx => Longest Palindrome Substring
ABCABACA
x xxxxxx => Longest Palindrome Subsequence
ถ้าเป็น Array มักจะเติมคำว่า Contiguous เข้าไปด้วย
เพื่อบอกว่าติดกันหรือไม่
• Contiguous Subsequence Array คือ Substring
• Subsequence Array คือ Subsequence
Substring คล้ายกับ Triangle Number ส่วน
Subsequence คล้ายกับ Subset
ตัวอย่างของ Triangle Number เช่น
O 1 1
OO 2 3
OOO 3 6
OOOO 4 10
OOOOO 5 15
OOOOOO 6 21
ตัวอย่างการเขียน Code เพื่อสร้าง Substring ทั้งหมด
class Start {
public static void main(String[] z) {
char[] a = "ABCD".toCharArray();
for (int i = 0; i < a.length; i++) {
String t = "";
for (int j = i; j < a.length; j++) {
t += a[j];
System.out.println(t);
}
}
}
}
ผลลัพธ์
A
AB
ABC
ABCD
B
BC
BCD
C
CD
D
ตัวอย่างการเขียน Code เพื่อสร้าง Subsequence ทั้งหมด
แนวคิดคือ สร้างจำนวนเต็มจาก 0 ถึง 2n
แล้วแปลงเป็นเลขฐานสอง เพื่อเลือกหรือข้ามตำแหน่งที่ต้องการ
class Start {
public static void main(String[] z) {
char[] a = "ABCD".toCharArray();
int count = 1 << a.length;
for (int i = 0; i < count; i++) {
System.out.print(i);
String t = "";
for (int j = 0; j < a.length; j++) {
int p = 1 << a[j] - 1;
if (p == (p & i)) {
t += a[j];
}
}
System.out.println(" = " + t);
}
}
}
ผลลัพธ์ทั้งหมด 16 ตัว โดยมีตัวแรกสุดคือ Empty String
0 =
1 = A
2 = B
3 = AB
4 = C
5 = AC
6 = BC
7 = ABC
8 = D
9 = AD
10 = BD
11 = ABD
12 = CD
13 = ACD
14 = BCD
15 = ABCD
แบบฝึกหัด กำหนด String มาให้ เขียน Code
เพื่อนับจำนวน Substring ที่พบมากที่สุด เช่น
AABA มี Substring คือ
A
AA
AAB
AABA
A
AB
ABA
B
BA
A
พบ A มากที่สุด ตอบ 3
แบบฝึกหัด กำหนด String มาให้ เขียน Code
เพื่อนับความยาวของ Unique Substring ที่สั้นที่สุด เช่น
AABA มี Substring คือ
A พบ 3 ตัว
AA พบ 1 ตัว เป็น Unique Substring
AAB พบ 1 ตัว เป็น Unique Substring
AABA พบ 1 ตัว เป็น Unique Substring
AB พบ 1 ตัว เป็น Unique Substring
ABA พบ 1 ตัว เป็น Unique Substring
B พบ 1 ตัว เป็น Unique Substring
BA พบ 1 ตัว เป็น Unique Substring
Unique Substring ที่สั้นที่สุดคือ B ตอบ 1