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