当前位置: 首页 > wzjs >正文

包头网站建设良居网络网络营销活动案例

包头网站建设良居网络,网络营销活动案例,做网站哪一家公司好,东菀高端网站建设找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: …

找出字符串中第一个匹配项的下标

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。

示例 1:
输入:haystack = “sadbutsad”, needle = “sad”
输出:0
解释:“sad” 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。

方法一、暴力法

类似双指针的思想,遍历解决。优势就是简单容易理解,但时间复杂度不是最优。

复杂度
时间复杂度:O(n*m)
空间复杂度:O(1)

Swift

func strStr(_ haystack: String, _ needle: String) -> Int {let cntL = haystack.countlet cntR = needle.countvar i = 0while i+cntR <= cntL {var flag = truefor j in 0..<cntR {if haystack[haystack.index(haystack.startIndex, offsetBy: i+j)] != needle[needle.index(needle.startIndex, offsetBy: j)] {flag = falsebreak}}if flag {return i}i += 1}return -1}

OC

-(NSInteger)strStr:(NSString *)haystack needle:(NSString *)needle {if (needle.length <= 0) {return -1;}NSInteger n = haystack.length, m = needle.length;for (NSInteger i=0; i+m<=n; i++) {NSInteger j = 0;while (j<m && [haystack characterAtIndex:i+j] == [needle characterAtIndex:j]) {j++;}if (j == m) {return i;}}return -1;
}

方法二、KMP算法(推荐)

面试的时候如果能撸出来,那么基本就稳了,相反,如果只知道暴力法,那可能结果就是回去等通知吧。
具体算法讲解请参考:
彻底搞懂KMP算法!!(配视频讲解)

Swift

//KMP 解法func strStr(_ haystack: String, _ needle: String) -> Int {let n = haystack.countlet m = needle.countif m == 0 {return 0}//构造next数组var pi = Array(repeating: 0, count: m+1)var j = 0for i in 1..<m {while j > 0 && needle[needle.index(needle.startIndex, offsetBy: i)] != needle[needle.index(needle.startIndex, offsetBy:j)] {j = pi[j-1]}if needle[needle.index(needle.startIndex, offsetBy: i)] == needle[needle.index(needle.startIndex, offsetBy: j)]  {j += 1}pi[i] = j}j = 0for i in 0..<n {while j>0 && haystack[haystack.index(haystack.startIndex, offsetBy: i)] != needle[needle.index(needle.startIndex, offsetBy: j)] {j = pi[j-1]}if haystack[haystack.index(haystack.startIndex, offsetBy: i)] == needle[needle.index(needle.startIndex, offsetBy: j)] {j += 1}if j == m {return i-m+1}}return -1}

OC

//KMP
-(NSInteger)strStr:(NSString *)haystack needle:(NSString *)needle {NSInteger n = haystack.length;NSInteger m = needle.length;if (m <= 0) {return 0;}NSMutableArray *next = [NSMutableArray array];for (NSInteger i=0; i<m; i++) {next[i] = @(0);}//求next数组NSInteger i=1;NSInteger j = 0;for (; i<m; i++) {//不相等的情况if (j>0 && [needle characterAtIndex:i] != [needle characterAtIndex:j]) {j = [next[j-1] integerValue];}//相等情况if ([needle characterAtIndex:i] == [needle characterAtIndex:j]) {j++;}//赋值next[i] = [NSNumber numberWithInteger:j];}j = 0;for (i=0; i<n; i++) {if (j > 0 && [haystack characterAtIndex:i] != [needle characterAtIndex:j]) {j = [next[j-1] integerValue];}if ([haystack characterAtIndex:i] == [needle characterAtIndex:j]) {j++;}if (j == m) {return i-m+1;}}return -1;
}
http://www.dtcms.com/wzjs/159052.html

相关文章:

  • 网站咋做推广天津seo培训
  • 佛山市公司网站制作杭州关键词排名工具
  • 小型网站建设四川旅游seo整站优化站优化
  • 做物流网站多少钱seo顾问服务四川
  • 做网站赚外快百度快速排名
  • 门户网站建设目的谷歌官网入口手机版
  • 铭做网站建设池州网络推广
  • 专业公司做网站廊坊百度关键词优化怎么做
  • 开发一个商城网站需要多少钱平台优化
  • 网站后台作用2022当下社会热点话题
  • wordpress是动态网站吗优化网站打开速度
  • 服务一流的做网站百度官网首页
  • 医药网站建设怎么注册一个网站
  • 微信公众号怎么做的跟网站似的百度官网入口链接
  • 电商网站需求分析前端seo怎么优化
  • 免费做网站公司哪家好360免费建站官网
  • 幼儿园管理网站模板18款禁用看奶app入口
  • 首页页面设计优化推广seo
  • 做网站怎么样引流今日百度关键词排名
  • 做网站多久学会北京网站
  • 电子商务网站建设方案案例广州白云区新闻头条最新消息今天
  • 雅安 网站建设信息流优化师是做什么的
  • 建设企业网站价格商丘网络推广哪家好
  • 济宁网站建设推广app
  • 全美网站建设亚洲长尾关键词挖掘
  • 网站后端性能优化措施正规seo关键词排名哪家专业
  • 西安广告设计公司有哪些站优云seo优化
  • 城乡建设委(房管局)官方网站长春seo排名扣费
  • 万荣做网站湖南seo推广软件
  • 番禺人才网招聘信恿刷seo关键词排名软件