【程式碼向】字串KMS演算法,判斷某一字串是否包含另一字串
public static class KMS { #region Defines public const int StringStartIndex = 0; #endregion private static int[] GetNext(string s) { int[] next = new int[s.Length]; //當與首字元不同時繼續判斷下一個字元是否與首字元相同 next[StringStartIndex] = StringStartIndex - 1; int i = StringStartIndex, j = StringStartIndex - 1; while (i < s.Length - 1) { //前一個或是串內全然不同時重新判斷,後一個是串內部分相同時,從相同處尾開始判斷 if (j == StringStartIndex - 1 || s[i] == s[j]) { //此時可以避免進行重複判斷(及相同的字元判斷不同時,索引到前一個相同的字元繼續判斷是否不同 if (s[++i] != s[++j]) next[i] = j;//此時與之前相同 else next[i] = next[j]; } else j = next[j];//之所以不是初始化為StringStartIndex - 1,是為了避免串內相同串內還有相同串 //例如qwqqaqqwqqqwqqaq,qwqqaq有兩處重複,qwq有三處 } return next; } public static int KMS_Index(string b, string c) { int[] next = GetNext(c); int i = StringStartIndex - 1, j = StringStartIndex - 1; while (i < b.Length && j < c.Length) { //或判斷的前半句是當與首字元不同時繼續判斷下一字元(因為++j之後j是StringStartIndex),或判斷的後半句是相同時繼續判斷下一個字元是否相同 if (j == StringStartIndex - 1 || b[i] == c[j]) { ++i; ++j; } else j = next[j]; } if (j == c.Length) return i - c.Length; return -1; } }
相關推薦
【程式碼向】字串KMS演算法,判斷某一字串是否包含另一字串
public static class KMS { #region Defines public const int StringStartIndex = 0; #endregion priva
【程式碼向】簡易計算器邏輯
class Program { static void Main(string[] args) { Queue<string> OperationQueue = new Queue<s
【程式碼筆記】iOS-底下滾動,上面標題欄也會跟著變動
#import "RootViewController.h" @interface RootViewController () @end @implementation RootViewController - (id)initWithNibName:(NSString *)nibNameOrNil
【資料結構 C描述】設計一個演算法,用於檢測給定的字串是否為對稱串。
【資料結構 C描述】設計一個演算法,用於檢測給定的字串是否為對稱串。 所謂對稱串,就是字串從左往右讀和從右往左讀的序列一樣。 例如: abccba是對稱串。 abcabc不是對稱串。 //main.cpp #include <iostream> #include
【技術向】DSST目標跟蹤演算法Matlab程式碼執行指南
論文:Accurate Scale Estimation for Robust Visual Tracking(DSST) 1.執行環境 win8.1+matlabR2015a 2.準備工作 將code下載至電腦任意位置,檢視一下檔案,進入目錄D:\DSST_c
【技術向】KCF目標跟蹤演算法Matlab程式碼執行指南
核化相關濾波目前較為流行,便試著跑一下作者João F. Henriques提供的matlab程式碼,一開始各種不成功,在網上也沒有解答。下面把我跑成功的經驗和大家分享。 執行環境 win8.1+matlabR2014a 準備工作 將程式
【技術向】目標跟蹤DSST改進版fDSST演算法程式碼分析
MD大神的fDSST是DSST的加速改進版,文章發表在TPAMI17上先給文章地址: http://www.cvl.isy.liu.se/en/research/objrec/visualtracking/scalvistrack/DSST_TPAMI.pdf f
【Java,面試】實現一個演算法,確定一個字串的所有字元是否全都不同
//method to figure out if there's no duplicate char in a ASCII string import java.lang.String boolean isUniquedChars(String myString
【ML_Algorithm 1】線性迴歸——演算法推導及程式碼實現
::::::::線性迴歸:::::::: 第一式 第二式 從式一到式二,需要新增一個
【程式碼筆記】Web-JavaScript-JavaScript字串
一,效果圖。 二,程式碼。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>javascript 字串</title>
【程式碼集合】連線資料庫、查詢所有資料,API介面定義
連線資料庫、查詢所有資料,API介面定義 <?php $dbhost = 'localhost:3306'; //mysql伺服器主機地址 $dbuser = 'root'; //mysql使用者名稱 $dbpass = 'root';//m
【機器學習】決策樹演算法(二)— 程式碼實現
#coding=utf8 ‘’’ Created on 2018年11月4日 @author: xiaofengyang 決策樹演算法:ID3演算法 ‘’’ from sklearn.feature_extraction import DictVectorize
【新手向】最大團問題和最大獨立子集的懶人演算法(隨機化)
首先,團是什麼呢? 團就是一個點集,點集中任意兩點都有直接的邊相連 舉個栗子: 圖中紅色的點構成了一個團,當然單獨一個點也算是一個團。 那麼,獨立子集又是什麼呢? 和團正好相反,獨立子集也
【演算法】KMP經典演算法,你真的懂了嗎?
有關KMP演算法的書籍、帖子、部落格鋪天蓋地,但是你真的能看懂?你知道為什麼要有next陣列,next陣列到底什麼意思,又該怎麼求next陣列,有了next陣列之後又該怎樣判斷模式串和主串是否匹配成功?本文絕對不是講解KMP演算法最細緻的一篇文章,但卻是為了解決
【java初學者】匯出jar包,隱藏核心實現類程式碼
war包匯出是可以執行起來的。 jar包跟css,js一樣,單獨匯出來的時候可以不不帶原始碼,只有class, 但是:它既安全的隱藏了核心實現類程式碼,又在專案中一樣可以跑起來,沒有報錯資訊。 下面進行演習,分為手動匯出jar 和 在Linux系統沒有介面的時候,純do
【C語言】實現一個函式,可以左旋字串中的k個字元。
.實現一個函式,可以左旋字串中的k個字元。 AABCD左旋一個字元得到ABCDA AABCD左旋兩個字元得到BCDAA 思路: 1.如果直接進行左移,肯定會存在陣列前面的元素丟失。 解決辦法:
【程式碼筆記】iOS-獲取字串的寬度,高度
一,程式碼。 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loadin
【機器學習】最近鄰演算法KNN原理、流程框圖、程式碼實現及優缺點
通過機器學習教學視訊,初識KNN演算法,對原理和演算法流程通過小應用進行Python實現,有了自己的一些理解。因此在此整理一下,既是對自己學習的階段性總結,也希望能和更多的朋友們共同交流學習相關演算法,如有不完善的地方歡迎批評指正。1、KNN演算法原理KNN,全稱k-Near
【機器學習】K-Means演算法的原理流程、程式碼實現及優缺點
分類是根據樣本某些屬性或某類特徵(可以融合多類特徵),把樣本型別歸為已確定的某一類別中。機器學習中常見的分類演算法有:SVM(支援向量機)、KNN(最鄰近法)、Decision Tree(決策樹分類法)
【Python】設計一個演算法,計算出n階乘中尾部零的個數
1.常見的思路:先求N的階乘,再計算零的個數。 (但是,時間消耗太大) def trailingZeros( n): S = 1 for i in range(1,n+1): S = S * i