strstr函数_【每日编程176期】实现strStr() II
每日編程中遇到任何疑問(wèn)、意見(jiàn)、建議請(qǐng)公眾號(hào)留言或直接撩Q474356284(備注每日編程)
今日問(wèn)題:
實(shí)現(xiàn)?strStr()?函數(shù)。
給定一個(gè)?haystack 字符串和一個(gè) needle 字符串,在 haystack 字符串中找出 needle 字符串出現(xiàn)的第一個(gè)位置 (從0開(kāi)始)。如果不存在,則返回??-1。
示例 1:
輸入: haystack= "hello", needle = "ll"
輸出: 2
示例 2:
輸入: haystack= "aaaaa", needle = "bba"
輸出: -1
說(shuō)明:
當(dāng)?needle?是空字符串時(shí),我們應(yīng)當(dāng)返回什么值呢?這是一個(gè)在面試中很好的問(wèn)題。
對(duì)于本題而言,當(dāng)?needle?是空字符串時(shí)我們應(yīng)當(dāng)返回 0 。這與C語(yǔ)言的?strstr()?以及 Java的?indexOf()?定義相符。
解決方法:
算法思想:
原strstr()函數(shù)。
strstr(str1,str2) 函數(shù)用于判斷字符串str2是否是str1的子串。如果是,則該函數(shù)返回str2在str1中首次出現(xiàn)的地址;否則,返回NULL。
KMP算法。
參考:
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
C++代碼:
C代碼:
Java代碼:
據(jù)搜集,還有一種Boyer-Moore算法,一般情況下比KMP快3-5倍。
具體可參考:
https://baike.baidu.com/item/Boyer-%20Moore%E7%AE%97%E6%B3%95/16548374?fr=aladdin
明日題目預(yù)告:
兩數(shù)相除
給定兩個(gè)整數(shù),被除數(shù)?dividend?和除數(shù)?divisor。將兩數(shù)相除,要求不使用乘法、除法和 mod 運(yùn)算符。
返回被除數(shù)?dividend?除以除數(shù)?divisor?得到的商。
示例?1:
輸入: dividend= 10, divisor = 3
輸出: 3
示例?2:
輸入: dividend= 7, divisor = -3
輸出: -2
說(shuō)明:
被除數(shù)和除數(shù)均為 32 位有符號(hào)整數(shù)。
除數(shù)不為?0。
假設(shè)我們的環(huán)境只能存儲(chǔ) 32 位有符號(hào)整數(shù),其數(shù)值范圍是 [?231,? 231?? 1]。本題中,如果除法結(jié)果溢出,則返回 231?? 1。
總結(jié)
以上是生活随笔為你收集整理的strstr函数_【每日编程176期】实现strStr() II的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关键信息基础设施保护条例_韩永刚:内生安
- 下一篇: 金士顿sd卡恢复软件_手机上使用SD内存