字串的查詢(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