1. 程式人生 > >Sunday字串搜尋演算法Delphi實現

Sunday字串搜尋演算法Delphi實現

Sunday演算法描述

這玩意兒有人實現過,作為驗證再稍微美化了一下:

function PosEx(KeyStr, TextStr: string): Integer;
var
  I: Integer;
  KeyLen, BuffLen: Integer;

  function Match(N: Integer): Boolean;
  var
    J: Integer;
  begin
    Result := True;
    for J := 0 to KeyLen - 1 do
      if TextStr[J + N] <> KeyStr[J + 1] then begin
        Result := False;
        Exit;
      end;
  end;

begin
  Result := 0;
  I := 1;
  KeyLen := Length(KeyStr);
  BuffLen := Length(TextStr);
  while not Match(I) do
  begin
    if I > BuffLen then Break;
    if Pos(TextStr[I + KeyLen], KeyStr) <> 0 then begin
      I := I + 1 + KeyLen - Pos(TextStr[I + KeyLen], KeyStr);
    end else begin
      I := I + KeyLen;
    end;
  end;
  if Match(I) then
    Result := I;
end;


相關推薦

Sunday字串搜尋演算法Delphi實現

Sunday演算法描述 這玩意兒有人實現過,作為驗證再稍微美化了一下: function PosEx(KeyStr, TextStr: string): Integer; var I: Integer; KeyLen, BuffLen: Integer; fu

python 遞迴深度優先搜尋與廣度優先搜尋演算法模擬實現

一、遞迴原理小案例分析 (1)# 概述 遞迴:即一個函式呼叫了自身,即實現了遞迴 凡是迴圈能做到的事,遞迴一般都能做到! (2)# 寫遞迴的過程 1、寫出臨界條件2、找出這一次和上一次關係3、假設當前函式已經能用,呼叫自身計算上一次的結果,再求出本次的結果 (3)案例分析:求1+2+3+…+n的數和

grep之字串搜尋演算法Boyer-Moore由淺入深(比KMP快3-5倍)

#include <stdio.h> #include <string.h> #define MAX_CHAR 256 #define SIZE 256 #define MAX(x, y) (x) > (y) ? (x) : (y) void BoyerMo

字串搜尋演算法總結

因為在網上搜尋hash演算法的知識,無意中又找到一些字串搜尋演算法。 由於之前已經學習過一些搜尋演算法,覺得應該可以歸為一類。因此就寫一篇文章來記錄下學習的過程。 問題: 在一長字串中找出其是否包含某子字串。 首先當然還是簡單演算法,通過遍歷來檢索所有的可能:  publ

Sunday搜尋演算法實現

int MAXSIZE = 256;   int moveLength[MAXSIZE];   void getMoveLength(const string &T) {     int tLen = T.size();     for(int i = 0; i &

字串匹配演算法(KMP、BM和Sunday),及Python實現

主要對三種字串匹配演算法(KMP、BM、Sunday)進行總結。這三種字串匹配演算法之間的主要區別在於:如果在匹配過程中遇到一個不匹配位,該用何種策略進行移位。例如,存在兩個字串,如下: 字串:      ABCADAB ABCDABCDABD 搜尋字串:ABCDA

【轉載】黃金比例搜尋演算法(Golden Section Search)的實現

出處: https://www.codelast.com/%E5%8E%9F%E5%88%9B-%E9%BB%84%E9%87%91%E6%AF%94%E4%BE%8B%E6%90%9C%E7%B4%A2%E7%AE%97%E6%B3%95%EF%BC%88gold   黃金比

寫一個遞迴演算法實現字串逆序儲存,要求不另設串儲存空間。

遞迴演算法中需要使用一個靜態變數儲存陣列下標 #include <iostream> using namespace std; void invert(char A[]) { char ch; static int i=0;//利用靜態變數儲存陣列下標 ci

實現簡易字串壓縮演算法:由字母a-z或者A-Z組成,將其中連續出現2次以上(含2次)的字母轉換為字母和出現次數,

@Test public void test1(){ String content1 = "AAAAAAAAAAAAAAAAAAAAAAAAttBffgfaaddddddsCDaaaBBBBdddfdsgggggg"; String result = yasuo(content1);

字串匹配演算法實現

KMP演算法 1 void Next(char *src,int n,int *next) 2 { 3 int j,k; 4 j=0; 5 k=-1; 6 next[0] = -1; 7 while(j<n-1) 8 { 9 if(k==-1 || src[j] == src[

一種較為高效的TreeList生成演算法Delphi實現

記得不久前曾寫過篇關於TreeList生成的文章。雖然那個演算法裡,我已經有對葉節點做判斷,避免無用的Filter操作。但是非葉節點的Filter操作依然是無可避免的。而Filter又是影響整個生成的最重要因素,因此當帶子節點的節點很多時,速度還是要被拖下去的。 後來我看到了一種覺得不錯的思路,

N數碼問題的啟發式搜尋演算法--A*演算法python實現

一、啟發式搜尋:A演算法 1)評價函式的一般形式 : f(n) = g(n) + h(n) g(n):從S0到Sn的實際代價(搜尋的橫向因子) h(n):從N到目標節點的估計代價,稱為啟發函式(搜尋的縱向因子); 特點: 效率高, 無回溯,   搜尋演算法 OPEN表 : 存放待擴充套件的節點. CLOS

Dijkstra演算法(D演算法實現路徑搜尋matlab GUI 實現 路徑規劃

Dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。Dijkstra演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結

【LeetCode-演算法】 79.單詞搜尋(Java實現

題目 給定一個二維網格和一個單詞,找出該單詞是否存在於網格中。 單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重複使用。 示例: board = [ ['A','B','C

C++實現記憶搜尋演算法

1、記憶搜尋演算法:        給n*n地圖,老鼠初始位置在(0,0),它每次行走要麼橫著走要麼豎著走,每次最多可以走出k個單位長度,且落腳點的權值必須比上一個落腳點的權值大,求最終可以獲得的最大權值  2、思路      每次最多m步,記錄四個方向的下一次走法可以

區域性搜尋演算法的R語言實現

禁忌演算法 禁忌演算法是啟發式演算法對個體的應用的一種。由於在運用最速下降或者最速上升區域性搜尋最值的時候可能會因為到了區域性最小值後停止搜尋。這裡禁忌演算法是一種可以look back的演算法,但是需要設定一些禁忌目錄來保證搜尋不是無限的。 例如:在B

演算法實現連結串列儲存的迴文字串判斷

題目:如何判斷一個單鏈表結構的字串是否是迴文字串。例如,“123454321”,返回“yes”;“12345”,返回“false” 可執行程式碼:isPalindrome.cpp #include&l

Java實現演算法導論中樸素字串匹配演算法

樸素字串匹配演算法沿著主串滑動子串來迴圈匹配,演算法時間效能是O((n-m+1)m),n是主串長度,m是字串長度,結合演算法導論中來理解,具體程式碼參考: package cn.ansj; publ

Python實現深度優先與寬度優先搜尋演算法

實驗目的:瞭解和掌握深度優先和寬度優先演算法的原理以及應用並實現兩種演算法。實驗內容:1. 演算法原理首先,我們給定一個二叉樹圖如下: 1). 寬度優先搜尋:寬度優先搜尋演算法(Breadth First Search,BSF),思想是:· 1.從圖中某頂點v出發,首先訪問定

java筆試題:用java實現字串壓縮演算法

題目:將字串 aaabcdda (可以從控制檯接收)程式設計實現將其轉換為 3a1b1c2d1a。 我的大致就這樣: System.out.print("請輸入一串字串:"); Scanner s = new Scanner(System.in); String str