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.
Examples:
1) Input:
txt[] = "THIS IS A TEST TEXT"
pat[] = "TEST"
Output:
Pattern found at index 10
2) Input:
txt[] = "AABAACAADAABAAABAA"
pat[] = "AABA"
Output:
Pattern found at index 0
Pattern found at index 9
Pattern found at index 13
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.
package com.jlu.demo;
public class PatternSearching {
/**
* @param args
*/
public static void main(String[] args) {
String a=new String("AABAACAADAABAAABAA");
char[] txt = a.toCharArray();
String b=new String("AABA");
char[] pat = b.toCharArray();
search(txt, pat);
}
public static void search(char[] txt,char[] pat)
{
int m=pat.length;
int n=txt.length;
for(int i=0;i<=n-m;i++)
{
int j;
for(j=0;j<m;j++)
{
if(txt[i+j]!=pat[j])
{
break;
}
}
if(j==m)
{
System.out.println("Pattern found at index "+i);
}
}
}
}
What is the best case?
The best case occurs when the first character of the pattern is not present in text at all.
txt[] = “AABCCAADDEE”
pat[] = “FAA”
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.
txt[] = “AAAAAAAAAAAAAAAAAA”
pat[] = “AAAAA”.
2) Worst case also occurs when only the last character is different.
txt[] = “AAAAAAAAAAAAAAAAAB”
pat[] = “AAAAB”