最近我在接受采访时被问到,面试官问我上面这个问题。
我肯定感到困惑并通过使用for循环实现来回答他
str.length()
... 知道这可能是错误的方式,但任何人都可以提出更好的方法吗?谢谢: - )
答案 0 :(得分:1)
String.prototype.search (regexp)
使用参数regexp调用搜索方法时,将执行以下步骤:
调用CheckObjectCoercible将此值作为参数传递。
让string成为调用ToString的结果,并将此值作为参数。
如果Type(regexp)是Object并且regexp的[[Class]]内部属性的值是“RegExp”,那么让rx为regexp;
否则,让rx成为一个新的RegExp对象,就像使用表达式new RegExp(regexp)一样,其中RegExp是具有该名称的标准内置构造函数。
从头开始搜索值字符串,以发生正则表达式模式rx。设result为一个数字,表示模式匹配的字符串中的偏移量,如果没有匹配则为-1。执行搜索时,将忽略regexp的lastIndex和全局属性。 regexp的lastIndex属性保持不变。
- 醇>
返回结果。
或者,如果你想完全避免单词RegExp
并搜索一个子字符串,那么
String.prototype.indexOf (searchString, position)
如果searchString显示为将此对象转换为String的结果的子字符串,则在一个或多个大于或等于position的位置,则返回最小的此类位置的索引;否则,返回-1。如果position未定义,则假定为0,以便搜索所有String。
indexOf方法接受两个参数searchString和position,并执行以下步骤:
调用CheckObjectCoercible将此值作为参数传递。
设S是调用ToString的结果,并将此值作为参数。
让searchStr为ToString(searchString)。
设pos为ToInteger(位置)。 (如果未定义位置,则此步骤将生成值0)。
设len为S中的字符数。
让我们开始为min(max(pos,0),len)。
让searchLen成为searchStr中的字符数。
- 醇>
返回不小于start的最小可能整数k,使得k + searchLen不大于len,并且对于小于searchLen的所有非负整数j,S的位置k + j处的字符与searchStr位置j的字符;但如果没有这样的整数k,则返回值-1。
答案 1 :(得分:0)
我认为答案取决于背景,而且背景似乎缺乏。
如果问题是关于算法的,那么我相信你最好的算法选择(即最快的算法)是Boyer–Moore string search。
如果问题是PHP中的HowTo,则可能是string.indexOf
。 <{1}}可能不是一个有效的答案,因为它需要一个正则表达式。
- S [i]指的是字符串S的索引i处的字符,从1开始计算。
- S [i..j]是指从索引i开始到j结束的字符串S的子串。
- 对于范围为[1,n]的某些i,S的前缀是子串S [1..i],其中n是S的长度。
- S的后缀是范围[1,n]中某些i的子串S [i..n],其中n是S的长度。
- 要搜索的字符串称为模式,并用符号P。
表示- 正在搜索的字符串称为文本,并以符号T。
引用- P的长度是n。
- T的长度是m。
- P与T的对齐是T中的索引k,使得P的最后一个字符与T的索引k对齐。
- 如果P等于T [(k-n + 1).. k],则在对齐处发生P的匹配或出现。
醇>