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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

【Leetcode】【Easy】Implement strStr()

發(fā)布時(shí)間:2023/12/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Leetcode】【Easy】Implement strStr() 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Implement strStr().

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

?

解題:

本題為典型的KMP算法考察題,KMP算法描述為:

  設(shè)主串S,匹配串P,i為S的索引下標(biāo),j為P的索引下標(biāo),初始i和j設(shè)置為0。

  在i小于S的長(zhǎng)度和j小于P的長(zhǎng)度時(shí),開(kāi)始循環(huán):

  1、比較S[i]和P[j]是否相同;

  2、如果相同則i++,j++,返回執(zhí)行第1步;

  3、如果不同,則計(jì)算已匹配成功的P[0]~P[j-1]中,相同前綴和后綴的最大長(zhǎng)度,設(shè)為n;

  4、令i不變,j為n(指向相同前后綴的后一個(gè)字符),返回執(zhí)行第1步;

  循環(huán)結(jié)束時(shí),查看j值是否等于P的長(zhǎng)度,如果等于則匹配成功,否則主串中不包含匹配串。

計(jì)算最長(zhǎng)相同前后綴:

  新建一個(gè)數(shù)組a,數(shù)組長(zhǎng)度為匹配串P長(zhǎng)度。數(shù)組的每一位a[i],表示由P[0]~P[i]表示的字符串,最長(zhǎng)相同前后綴的位數(shù);

  a[0]初始化為0,令i為1,j為0,對(duì)于a[i](0<i<len)有兩種情況:

  1、如果P[j] == P[i],那么a[i] = a[i - 1] + 1;

    ?接著j++,i++重新執(zhí)行第一步;

  2、當(dāng)P[j] !=?P[i],如果j此時(shí)為0,表示由P[0]~P[i]組成的字符串沒(méi)有相同的前綴和后綴,所以a[i]=0,i++繼續(xù)進(jìn)行第一步;

  3、當(dāng)P[j] !=?P[i],并且j不為0,表示可能包含相同前綴和后綴,則令j = a[j - 1],繼續(xù)執(zhí)行第一步;

  直到計(jì)算出所有a[i]的值。

?

AC代碼見(jiàn):

1 class Solution { 2 public: 3 int strStr(char *haystack, char *needle) { 4 int num = strlen(needle); 5 int *next = new int[num]; 6 getNext(needle, next); 7 8 int i = 0; 9 int j = 0; 10 while (haystack[i] != '\0' && needle[j] != '\0') { 11 if (haystack[i] == needle[j]) { 12 ++i; 13 ++j; 14 } else if (j == 0) { 15 ++i; 16 } else { 17 j = next[j - 1]; 18 } 19 } 20 21 free(next); 22 if (needle[j] != '\0') 23 return -1; 24 else 25 return i - j; 26 } 27 28 void getNext(char *needle, int *next) { 29 int i = 1; 30 int j = 0; 31 next[0] = 0; 32 while (needle[i] != '\0') { 33 if (needle[i] == needle[j]) { 34 next[i] = j + 1; 35 ++i; 36 ++j; 37 } else if (j == 0) { 38 next[i] = 0; 39 ++i; 40 } else { 41 j = next[j - 1]; 42 } 43 } 44 } 45 }; View Code

?

代碼優(yōu)化:

實(shí)際編寫(xiě)中,為了避免判定j是否為0,簡(jiǎn)化操作。可以設(shè)定next數(shù)組,取代a數(shù)組。next的含義是,當(dāng)kmp算法需要尋找子串下一個(gè)比較的位置時(shí),直接從next數(shù)組中取值;

其中next[0] = -1作為哨兵位,next[i] = a[i - 1],即將a數(shù)組整體后移一位保存在next數(shù)組中。

AC代碼如下:

1 class Solution { 2 public: 3 int strStr(char *haystack, char *needle) { 4 int num = strlen(needle); 5 int *next = new int[num]; 6 getNext(needle, next); 7 8 int i = 0; 9 int j = 0; 10 while (haystack[i] != '\0' && j < num) { 11 if (j == -1 || haystack[i] == needle[j]) { 12 ++i; 13 ++j; 14 } else { 15 j = next[j]; 16 } 17 } 18 19 free(next); 20 if (needle[j] != '\0') 21 return -1; 22 else 23 return i - j; 24 } 25 26 void getNext(char *needle, int *next) { 27 int i = 0; 28 int j = -1; 29 int strl = strlen(needle); 30 next[0] = -1; 31 while (i < strl - 1) { 32 if (j == -1 || needle[i] == needle[j]) { 33 next[++i] = ++j; 34 } else { 35 j = next[j]; 36 } 37 } 38 } 39 };

?

轉(zhuǎn)載于:https://www.cnblogs.com/huxiao-tee/p/4227362.html

總結(jié)

以上是生活随笔為你收集整理的【Leetcode】【Easy】Implement strStr()的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 亚洲成网 | 国产日韩在线视频 | 日韩免费高清视频 | www.五月激情| 国产精品tv | 天天槽 | 韩国电影大尺度在线观看 | 日韩欧美不卡视频 | 国产情侣一区二区三区 | 国产精品视频久久 | 我爱avav色aⅴ爱avav | 一级黄色大片免费看 | 亚洲啪视频 | 欧美日本一区二区三区 | 亚洲激情小视频 | 国产精品久久久午夜夜伦鲁鲁 | 综合五月网 | 在线精品视频播放 | 成人免费播放视频 | 91精品人妻互换一区二区 | 国产成人精品女人久久久 | 少妇福利在线 | 中国毛片基地 | 自拍偷拍福利 | 一级黄色片免费播放 | 久久成人高清 | 精品啪啪| 国产精品自拍网 | 蜜桃麻豆视频 | 欧美日韩色图片 | 午夜精品极品粉嫩国产尤物 | 色网导航站 | 99re这里只有精品首页 | 麻豆视频传媒入口 | 老版水浒传83版免费播放 | 精品小视频在线观看 | 古典武侠av | 制服.丝袜.亚洲.中文.综合懂色 | 成人激情站 | 成人午夜在线 | 青青草视频观看 | 亚洲狠狠操 | 精品乱码一区二区三区四区 | 国产xxxxxxxxx| 四虎少妇做爰免费视频网站四 | 久久久国产精华液 | 探花av在线 | 蜜美杏av | 日本日韩欧美 | 国产精品一二三四五区 | 久久久久99精品成人片我成大片 | 欧美乱论视频 | 国产小视频网站 | 国产美女无遮挡永久免费观看 | 精品国产91久久久久久久妲己 | 国产免费一区二区三区网站免费 | 国产精品theporn动漫 | 少妇精品在线 | 大陆av在线播放 | av在线一区二区 | 久久免费精品视频 | 国产一区二区免费视频 | 操日本老妇 | 成人在线观看免费高清 | 国产精品国产精品国产专区 | 五月婷婷综合激情 | 日韩精品一区中文字幕 | 亚洲永久视频 | 天天操天天干天天爽 | 欧美日韩三级在线观看 | 裸体美女免费视频网站 | 四虎影裤| 国产在线观看免费视频软件 | 久久99精品久久久久久噜噜 | 午夜剧场福利社 | 亚洲成人a∨ | 99色精品 | 嫩草视频一区二区三区 | 国产亚洲精品久久久 | 欧美日韩不卡一区二区三区 | av大帝在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 雨宫琴音一区二区三区 | 中国美女囗交视频 | 男男成人高潮片免费网站 | 免费在线观看av网址 | 亚洲调教欧美在线 | 国产调教视频 | 国产精品夜夜躁视频 | 99精品人妻国产毛片 | 日韩少妇高潮抽搐 | 色香五月 | wwwxx在线观看 | 永久免费成人代码 | 天天摸日日操 | 操丰满女人| 亚洲瘦老头同性xxxxx | 成人亚洲天堂 | 日日夜夜操视频 |