1. 程式人生 > >字串的查詢(1)

字串的查詢(1)

題目描述:
假設現在有這樣一個問題:有一個文字串S和一個模式串P,要查詢P在S中的位置。
解法一:蠻力解決
假設現在文字串S匹配呢到位置i,模式串P匹配到j位置,用蠻力匹配的思路,有:
1)如果當前字串匹配成功,S[i] == P[j],則i++,j++,繼續匹配下一個字元
2)如果匹配失敗,S[i] != P[j],則令i = i-j+1,j = 0,相當於每次匹配後,i回溯,j被置為0
程式碼如下:

#include<iostream>
#include<string.h>
using namespace
std; int findStr(char *str,char *pattern) { int len1 = strlen(str); int len2 = strlen(pattern); if (len1 < len2) return -1; int i = 0; int j = 0; while (j < len2 && i < len1) //兩個條件 { if (str[i] == pattern[j]) { i++; j++; } else
{ i = i-j+1; j = 0;//這裡別忘了寫 } } if (j == len2) return i-j; else return -1; } int main() { char str[1024]; char pattern[1024]; //getline(cin,str); gets(str); gets(pattern); cout << str << " "; cout << pattern<<endl; cout
<<findStr(str,pattern)<< endl; return 0; }

執行結果如下(centos5.5)
[[email protected] c++]# ./a.out
BBC ABCDAB ABCDABCDABDE
ABCDABD
BBC ABCDAB ABCDABCDABDE ABCDABD
15
時間複雜度個人認為是O(Len1*Len2).

相關推薦

第4章:介紹python物件型別/4.1 python的核心資料型別/4.2 字串/4.2.3 字串查詢、替換、分解、轉大小寫

字串查詢/替換/分解/轉大小寫 字串查詢 >>> S 'abcd' >>> S.find("bc") 1 替換 >>> S.replace("bc","xyz") 'axyzd' 分解 >>>

字串查詢(1)

題目描述: 假設現在有這樣一個問題:有一個文字串S和一個模式串P,要查詢P在S中的位置。 解法一:蠻力解決 假設現在文字串S匹配呢到位置i,模式串P匹配到j位置,用蠻力匹配

使用resultMap實現ibatis復合數據結構查詢(1.多重屬性查詢;2.屬性中含有列表查詢)

class 查詢語句 log num cit code element 訂單 例如 以訂單為例(訂單詳情包括了訂單的基本信息,配送物流信息,商品信息),直接上代碼: 1.多重屬性查詢 java實體 public class Orde

2017-09-21xlVBA_蒸發SQL循環查詢1

per sele sql debug 實例化 mex from 查詢 計時器 ‘ARRAY("1991","1992","1993","1994","1996","1997","1998","1999","2001") Sub ADO_SQL_QUERY_ONE_RNG(

Oracle 高級查詢1 關聯查詢 分組查詢

null 函數 定義 關聯 group 顯示 tinc 查詢 求平均值 高級查詢 1.關聯查詢作用:可以跨越多表查詢 --查詢出員工的名字和他所在部門的的名字 語法:select 列,列,列 from 表1 join 表2on 表1外鍵=表2主鍵 2.外聯接 左外聯

限定查詢1

str 結果 屏幕 現在 acl set 安裝 sqlplus 語句 3.1、認識限定查詢 例如:如果一張表中有100w條數據,一旦執行了“SELECT * FROM 表”語句之後,則將在屏幕上顯示表中的全部數據行的記錄,這樣即不方便瀏覽,也有可能造成死機的問題出現,所以此

python +ip2region IP庫地址文件實現秒級查詢1萬不同ip歸屬地址

python +ip2region一、服務器環境介紹: 服務器硬件:4核4g內存服務器系統:centos6.9 x86_64位最小化安裝 二、環境安裝 參考地址:https://github.com/lionsoul2014/ip2region直接下載包到服務器上的/root目錄下wget https://g

MyBatis舉例說明資料庫查詢1+n或者n+1問題

現象: 網上在解釋程式開發過程中常見的1+n或者n+1問題時,有的解釋不太詳細,初學者可能不太好理解; 現以Mybatis為例,解釋下該問題,如下: 1、場景:查詢出客戶基礎資訊及其訂單資訊 1.1 BOM模型設計:        Custom

C語言--字串拷貝、字串查詢字串比較、字串擷取

 在實際的應用當中,字元和字串的操作是最常用的技能。總結下來,提升能力。 一、字串拷貝 1、memcpy 2、strcpy 區別 二、字串查詢 三、字串比較 四、字串擷取 1、一種簡單而又機智的方法–strncpy  strncpy函

字元和字串處理(1)

2.1 字符集及字元編碼(字符集——字元的集合,不同的字符集,收錄的字元可能不同) 2.1.1多位元組字符集及ANSI編碼標準 (1)單位元組編碼:ASCII字符集及擴充套件——滿足英語及西歐語言的需要 (2)雙位元組編碼:——滿足亞洲等國家語言文字的需要,如:

mongodb 字串查詢匹配中$regex的用法

官網地址:https://docs.mongodb.com/manual/reference/operator/query/regex/#regex-case-insensitive 舉個例子來說:現在有以下集合(官網的例子): { "_id" : 100, "sku" : "abc123", "desc

Atitit redis使用場合總結 使用場景 目錄 1.1. 3. Session 儲存 1 1、 配置資料查詢 1 2. 排行榜應用,取TOP N操作 1 1.2. 1查詢

Atitit redis使用場合總結 使用場景          目錄 1.1. 3. Session 儲存 1 1、 配置資料查詢 1 2. 排行榜應用,取TOP N操作 1 1.2.     1

kmp字串查詢演算法

kmp字串查詢演算法 1 普通的字串查詢 普通的字串查詢是遍歷被查詢的字串,然後和key字串進行匹配,如果不一致,則,被查詢的字串+1,繼續向下遍歷。 程式碼如下: private static void search(String str, String key) {

DTOJ 1015: 幸運字串查詢 (lucky)

1015: 幸運字串查詢 (lucky) 時間限制: 2 S e

初夏小談:旋轉字串優化1.0,2.0(不用迴圈)

左旋與右旋原理一樣。之前旋轉不夠簡單,對此研究出更加優化的演算法。 #include<Aventador_SQ.h> //優化1.0 void XuanZhuan1(char *arr, int k) { char arr1[1024] = "0"; int i = 0; i

C語言字串查詢知識點搬運

1.  標頭檔案:#include <string.h> strchr() 用來查詢某字元在字串中首次出現的位置,其原型為:     char * strchr (const char *str, int c); 【引數】str 為要查詢的字串,

mysql必知必會-簡單查詢-1

簡單查詢 檢索資料 檢索語句select的基本結構: select 欄位名 from 表名 檢索就是需要從指定的表中檢索出指定的欄位名,以此獲取到你想要的資訊 檢索單列資訊 select id from customers;

字串查詢

1 暴力破解   java實現如下: 1 public class Naive { 2 3 /** 4 * 暴力破解 5 * 6 * @param pat 7 * @param txt 8 * @return

c++字串查詢函式實現

int find(const char*str,const char*sub_str) { //這裡就沒有判斷指標是否是NULL了 //保留起始地址以計算位置 const char *temp_str = str; //預設返回結果 int ret = -

php三個最基本的字串查詢函式

/** * 三個最基本的字串子串查詢函式 * 1.substr(): 根據位置查詢,輸入位置,返回字串 * 2.strstr(): 根據值查詢,返回字串 * 3.strpos(): 根據值查詢,返回位置 */   /** * 一、substr($str,$offset, $leng