日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

暴力子字符串查找算法

發(fā)布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 暴力子字符串查找算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

暴力子字符串查找算法的名字雖然很霸氣,但是效率不是很高。是一種簡單、粗暴的查找方式。
在最壞的情況下,暴力子字符串查找算法在長度為N的文本中查找長度為M的模式需要~NM次字符比較。

核心思想:就是對主串中的每一個字符作為子串的開頭,與要匹配的字符串進(jìn)行匹配。對大串做大循環(huán),每個字符開頭做子串的長度的小循環(huán),知道匹配成功或者全部遍歷完成為止。

package com.test.test;import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** 暴力子字符串查找算法 2015年10月24日 下午6:21:09* * @author 張耀暉**/ public class Test5 {public static void main(String[] args) {Test5 test = new Test5();int index = test.searchFirst("hhh", "wohhhxiaohhhhhhhhh");System.out.println("目標(biāo)字符串第一次出現(xiàn)的索引位置:" + index);List<Integer> list = test.searchTotal("hhh", "wohhhxiaohhhhhhhhh");System.out.print("目標(biāo)字符串出現(xiàn)的所有的索引位置:");Iterator iterator = list.iterator();while (iterator.hasNext()) {System.out.print(iterator.next() + ", ");}}/*** 查詢目標(biāo)字符串在總字符串中第一次出現(xiàn)的索引位置* * @param pat* 目標(biāo)字符串* @param txt* 總字符串* @return 所要查詢的字符串第一次出現(xiàn)的索引位置,如果索引為-1就說明不存在。*/public int searchFirst(String pat, String txt) {int index = -1;// 索引int txtLength = txt.length();// 總字符串的長度int patLength = pat.length();// 所要查詢的字符串的長度for (int i = 0; i <= txtLength - patLength; i++) {// 控制總字符串比較位置for (int j = 0; j < patLength; j++) {// 控制所要查詢的字符串的比較位置if (txt.charAt(i + j) != pat.charAt(j)) {// 在比較中如果有不同的字符就跳出該循環(huán),繼續(xù)從總字符串的下一個字符開始比較break;} else {if (j == patLength - 1) {// 如果整個目標(biāo)字符串的內(nèi)容與總字符串中的內(nèi)容完全匹配,就返回目標(biāo)字符串第一次出現(xiàn)的索引位置index = i;return i;}}}}return index;}/*** 查詢目標(biāo)字符串在總字符串中出現(xiàn)的所有的索引位置* * @param pat* 目標(biāo)字符串* @param txt* 總字符串* @return 保存有查詢出來的所有目標(biāo)字符串在總字符串中出現(xiàn)的索引位置*/public List<Integer> searchTotal(String pat, String txt) {int txtLength = txt.length();// 總字符串的長度int patLength = pat.length();// 所要查詢的字符串的長度List<Integer> list = new ArrayList<Integer>();// for (int i = 0; i <= txtLength-patLength; i++) {//// for (int j = 0; j < patLength; j++) {// if(pat.charAt(j)!=txt.charAt(i+j)){// break;// }else{// if(j==(patLength-1)){// list.add(i);// break;// }// }// }//// }// return list;mSearch(pat, txt, patLength, txtLength, 0, list);// 為了實現(xiàn)遞歸將循環(huán)判斷比較的內(nèi)容抽取成一個方法return list;}/*** * @param pat* 目標(biāo)字符串* @param txt* 總字符串* @param patLength* 目標(biāo)字符串的長度* @param txtLength* 總字符串的長度* @param index* 目標(biāo)字符串開始的比較位置* @param list* 用于存儲匹配到的目標(biāo)字符串在總字符串中的索引位置*/public void mSearch(String pat, String txt, int patLength, int txtLength,int index, List<Integer> list) {for (int i = index; i <= txtLength - patLength; i++) {for (int j = 0; j < patLength; j++) {if (pat.charAt(j) != txt.charAt(i + j)) {break;} else {if (j == patLength - 1) {list.add(i);index = i + patLength;// 修改之后查詢的總字符串比較位置,防止出現(xiàn)把目標(biāo)字符串不作為整體看待的情況mSearch(pat, txt, patLength, txtLength, index, list);// 遞歸return;}}}}}}

運行結(jié)果打印:

總結(jié)

以上是生活随笔為你收集整理的暴力子字符串查找算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。