
Strings
Strings are a data structure used for storing sequences of characters and solving problems related to text manipulation, pattern matching, and efficient searching.

Dynamic Programming
Dynamic programming is a method for solving problems by breaking them down into simpler subproblems and storing the results to avoid redundant calculations.

Graph
A graph is a collection of nodes (vertices) and edges that connect pairs of nodes. It is used to represent relationships or connections between objects.

Greedy Algorithm
Greedy is a problem-solving algorithm that makes a locally optimal choice at each step, hoping that these local choices lead to a globally optimal solution.

Backtracking
Backtracking is a problem-solving algorithm that incrementally builds candidates for solutions and abandons them if they are not valid or lead to a dead end.

Recursion
Recursion is a method where the solution to a problem depends on solutions to smaller instances of the same problem.

Stack
A stack is a linear data structure that follows the Last In First Out (LIFO) principle, where the last element added is the first one to be removed.

Queue
A queue is a linear data structure that follows the First In First Out (FIFO) principle, where the first element added is the first one to be removed.

Array
An array is a linear data structure that stores elements in contiguous memory locations, allowing direct access using an index.

Linked List
A linked list is a dynamic linear data structure in which each element (node) contains data and a reference (pointer) to the next node, enabling efficient memory usage and flexible insertions or deletions without shifting elements.