/**
* 樸素算法
*
* 工作流程:字符串逐個匹配,匹配上則返回下標
*/
@Slf4j
public class NaiveStrClass {
public static void main(String[] args) {
String originStr = "hello naive java world";
String pattern = "java";
int index = naive(originStr, pattern);
int position = advance(originStr, pattern);
log.info("index:position ===> {}:{}", index, position);
}
/**
* 樸素匹配(通俗易懂用法)
* @param origin 原始主串
* @param pattern 模式
* @return 返回第一個匹配字符索引,匹配不成功則返回-1
*/
private static int naive(String origin, String pattern){
int position = 0;
while (position < origin.length()){ // 主循環
if(origin.charAt(position) == pattern.charAt(0)){
//第一個字符匹配,則連續匹配,匹配不上則進入下一輪循環匹配
if(position + pattern.length() > origin.length()){ // 防止主字符串溢出
break;
}
//全模式匹配
if(origin.startsWith(pattern, position)){
return position;
}
}
position++;
}
return -1;
}
/**
* 樸素匹配:高級用法
* @param origin 主串
* @param pattern 模式
* @return
*/
private static int advance(String origin, String pattern){
int originIndex = 0;
int patternIndex = 0;
while (originIndex < origin.length() && patternIndex < pattern.length()){
// 第一個字符匹配
if(origin.charAt(originIndex) == pattern.charAt(patternIndex)){
originIndex++;
patternIndex++;
}else { // 匹配不上,主串索引還原,繼續下一位匹配,已匹配的位數從0開始匹配
originIndex = originIndex - patternIndex + 1;
patternIndex = 0;
}
if(patternIndex == pattern.length()){ // 完全匹配,則推出
return originIndex - patternIndex;
}
}
return -1;
}
}
【字符串】樸素匹配算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.