Given a text txt[0..n-1] and a pattern pat[0..m-1], write a function search(char pat, char txt) that prints all occurrences of pat in txt. You may assume that n > m.
Input: txt = "THIS IS A TEST TEXT" pat = "TEST" Output: Pattern found at index 10 Input: txt = "AABAACAADAABAABA" pat = "AABA" Output: Pattern found at index 0 Pattern found at index 9 Pattern found at index 12
Pattern searching is an important problem in computer science. When we do search for a string in notepad/word file or browser or database, pattern searching algorithms are used to show the search results.
Naive Pattern Searching:
Slide the pattern over text one by one and check for a match. If a match is found, then slides by 1 again to check for subsequent matches.
Pattern found at index 0 Pattern found at index 9 Pattern found at index 13
What is the best case?
The best case occurs when the first character of the pattern is not present in text at all.
The number of comparisons in best case is O(n).
What is the worst case ?
The worst case of Naive Pattern Searching occurs in following scenarios.
1) When all characters of the text and pattern are same.
2) Worst case also occurs when only the last character is different.
The number of comparisons in the worst case is O(m*(n-m+1)). Although strings which have repeated characters are not likely to appear in English text, they may well occur in other applications (for example, in binary texts). The KMP matching algorithm improves the worst case to O(n). We will be covering KMP in the next post. Also, we will be writing more posts to cover all pattern searching algorithms and data structures.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Optimized Naive Algorithm for Pattern Searching
- Z algorithm (Linear time pattern searching Algorithm)
- KMP Algorithm for Pattern Searching
- Rabin-Karp Algorithm for Pattern Searching
- Finite Automata algorithm for Pattern Searching
- Boyer Moore Algorithm for Pattern Searching
- Aho-Corasick Algorithm for Pattern Searching
- Real time optimized KMP Algorithm for Pattern Searching
- Pattern Searching | Set 6 (Efficient Construction of Finite Automata)
- Pattern Searching using Suffix Tree
- Pattern Searching using a Trie of all Suffixes
- Pattern Searching using C++ library
- Longest Common Extension / LCE | Set 1 (Introduction and Naive Method)
- Suffix Tree Application 2 - Searching All Patterns
- Searching characters and substring in a String in Java
- Karatsuba algorithm for fast multiplication using Divide and Conquer algorithm
- Print all words matching a pattern in CamelCase Notation Dictonary
- Wildcard Pattern Matching
- Generate all binary strings from given pattern
- In-place replace multiple occurrences of a pattern