Tag: 开发

在Swift中实现strStr(); 早破

访谈编码中经常使用的一个经典问题(LeetCode的问题28)是: 创建一个将两个字符串s1和s2作为参数的函数,并找到一个整数,该整数表示子字符串s2在字符串s1中第一次出现的位置。 [由于您(这样很好)问到,参数s1和s2由小写英文字母ascii [az]组成,并且s1和s2中的一个(或两者)可以是空字符串“”) Swift是一种功能强大的语言,我们当然可以利用内置函数来快速解决这个小问题。 现在,随着时间的推移,Swift String API发生了变化(并且可能有些棘手),但这并不是人类的智慧。 一个简单的解决方案— Swift s1.range(of:s2) 这将返回一个可选的Range ? 这是我们想要的一种,但将其下限编码为一个Int。 能够? 具有比较s1 [0]和s2 [0]的高级算法。 如果没有匹配项,我们将比较s1 [1]和s2 [0],依此类推。 匹配迭代1-与s [0]匹配 显然我们不能完全匹配,因此我们不需要检查s2的其余部分。 匹配迭代2-与s [1]匹配 s2(s2 [0])的第一个元素 因此我们可以移至s1的下一个元素 s1 [1] = s2 [0] s2的第二个元素(s2 [1]) 第二个比较也匹配! s2的第三个元素(s2 [2]) 这里我们不匹配,并且s1 [1]与s [1]不完全匹配 匹配迭代3-与s1 [2]匹配 s2(s2 [0])的第一个元素 不幸的是s1 [2]与s2 [0]不匹配 匹配迭代4-与s1 [3]匹配 s2(s2 [0])的第一个元素 我们有一场比赛! s2的第二个元素(s2 […]