문자열 검색(String Search) 알고리즘
주어진 문자열에서 찾고자 하는 문자열이 있을 때, 해당 문자열의 위치를 찾는 알고리즘.
브루트-포스법이란?
텍스트의 맨 앞부터 한 문자씩 살펴보며 패턴의 첫 자와 일치하는 문자를 찾고,
일치한다면 그 문자부터 패턴의 나머지와 일치하는지 검사한다.
불일치한다면 텍스트의 다음 문자부터 다시 검사한다.
선형검색을 확장한 알고리즘으로, 단순법, 소박법이라고도 한다.
자바로 구현하기
package algorithm;
public class BFMatch {
//브루트-포스법으로 문자열을 검색하는 메서드
static int bfMatch(String txt, String pat) {
int pt = 0; //txt 커서
int pp = 0; //pat 커서
//텍스트 커서 OR 패턴 커서가 끝까지 도달하면 검색 종료
//즉, 반복 조건은 텍스트 커서 AND 패턴 커서가 끝까지 도달하지 않았을 때
while(pt!=txt.length() && pp!=pat.length()) {
//만약 텍스트 커서에 위치한 문자와 패턴 커서에 위치한 문자가 같다면
if(txt.charAt(pt)==pat.charAt(pp)) {
//그 다음 문자도 같은지 보기 위해 두 커서의 값을 증가시킨다.
pt++;
pp++;
//텍스트 커서에 위치한 문자와 패턴 커서에 위치한 문자가 같지 않다면
} else {
//텍스트 커서를 되돌리기 위해 패턴 커서 값을 뺀 후, 다음으로 넘어가기 위해 1을 더 한다.
pt = pt-pp+1;
//패턴의 처음부터 다시 검사해야하므로 패턴 커서는 0으로 바꾼다.
pp = 0;
}
}
if(pp==pat.length()) { //검색 성공
//매칭이 시작되는 지점을 반환하기 위해 pt-pp
return pt-pp;
}
return -1; //검색 실패
}
}
'알고리즘 > 검색 알고리즘' 카테고리의 다른 글
BM 검색 알고리즘 (0) | 2020.11.17 |
---|---|
KMP 검색 알고리즘 (0) | 2020.11.17 |
이진 검색(Binary Search) 알고리즘 (0) | 2020.11.17 |
순차 검색(Sequential Search) 또는 선형 검색(Linear Search) 알고리즘 (0) | 2020.11.17 |
검색 알고리즘 (0) | 2020.11.17 |
알고리즘/검색 알고리즘