首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何编写一个函数来查找较大字符串中的子字符串的位置,而不使用' find‘函数?

要编写一个函数来查找较大字符串中的子字符串的位置,而不使用'find'函数,可以使用字符串匹配算法,例如暴力匹配算法、KMP算法、Boyer-Moore算法等。

  1. 暴力匹配算法: 暴力匹配算法是最简单直观的字符串匹配算法,它的思想是从主串的第一个字符开始,逐个比较主串和子串的字符,如果不匹配,则主串的指针后移一位,再次从主串的该位置开始与子串匹配,直到找到匹配的子串或者主串遍历完毕。

代码示例:

代码语言:txt
复制
def find_substring(main_str, sub_str):
    m = len(main_str)
    n = len(sub_str)
    for i in range(m - n + 1):
        j = 0
        while j < n:
            if main_str[i + j] != sub_str[j]:
                break
            j += 1
        if j == n:
            return i
    return -1
  1. KMP算法: KMP算法是一种高效的字符串匹配算法,它利用已经匹配过的信息,避免不必要的字符比较,提高匹配效率。KMP算法的核心是构建next数组,用于指示当匹配失败时,子串应该向右移动的位置。

代码示例:

代码语言:txt
复制
def build_next(sub_str):
    n = len(sub_str)
    next = [0] * n
    i = 1
    j = 0
    while i < n:
        if sub_str[i] == sub_str[j]:
            j += 1
            next[i] = j
            i += 1
        elif j > 0:
            j = next[j - 1]
        else:
            next[i] = 0
            i += 1
    return next

def find_substring(main_str, sub_str):
    m = len(main_str)
    n = len(sub_str)
    next = build_next(sub_str)
    i = 0
    j = 0
    while i < m:
        if main_str[i] == sub_str[j]:
            i += 1
            j += 1
            if j == n:
                return i - j
        elif j > 0:
            j = next[j - 1]
        else:
            i += 1
    return -1

以上是两种常用的字符串匹配算法,可以根据实际需求选择合适的算法来编写查找子字符串的函数。

相关搜索:如何在模糊匹配的字符串中查找子字符串的位置如何创建一个函数来查找元素的坐标,而不管它的位置如何?如何编写Rust函数来查找两个字符串之间的不同字符?给定数组,编写一个函数来查找最大值并返回匹配的字符串如何创建一个函数来反转给定字符串值列表中的字符串,而不使用列表理解如何使用selenium查找excel文件中字符串的位置如何编写一个在字符串中的函数内部添加函数的函数?如何在Haskell中使用解析器来查找字符串中某些子字符串的位置?如何使用BigQuery查找字符串中的子串个数?如何编写python函数来检查给定的字符串是否在值中并返回键如何使用抽象函数查找某个字符串在列表中的位置?如何在sql中编写一个自定义函数来统计给定字符串中的字符数( len函数的后端代码)?如何使用std::find从字符串对< vector<,string >>类型的第一个元素中查找字符串?使用C字符串中的两个char*位置获取一个子字符串如何使用一个函数而不是使用PHP中的两个函数来完成相同的工作如何在列表中查找与另一个列表中的字符串或子字符串匹配的字符串如何使用r编程查找给定字符串中的单词索引或位置使用javascript查找字符串在另一个字符串中的位置如何编写一个计算字符串中每个字符的函数?如何在sql server中使用查找表替换列中的子字符串
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

纯JS实现在一个字符串b中查找另一个字符串a出现的所有位置,并且不使用字符串的方法(递归)

问题:判断字符串A在中所有出现字符串B中(长度大于1)的索引。...不得使用字符串方法indexof,substring等 有小伙伴在面试遇到了这个问题,乍一看如果使用使用字符串方法indexof,substring,很简单容易实现,但如果不使用这些方法,怎么样才能实现这个需求呢...// 思路: 如果不能使用字符串的相应方法,我们可以把字符串转换成数组,使用递归函数不断去比对相应的数组索引,然后把满足条件的索引打印出来,其实很多现在前后端交互处理数据的方法,用的都是递归偏多,...= 0 function ccc (arr) { // 第一个索引相同,让他们索引分别加上变量num,去比对他们索引后面的位置是否相同...一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量

1.2K20
  • 同事问我MySQL怎么递归查询,我懵逼了...

    find_in_set 函数 函数语法:find_in_set(str,strlist) str 代表要查询的字符串 , strlist 是一个以逗号分隔的字符串,如 ('a,b,c')。...此函数用于查找 str 字符串在字符串 strlist 中的位置,返回结果为 1 ~ n 。若没有找到,则返回0。...我想,是不是可以找到一个包含当前节点和所有子节点的以逗号拼接的字符串 strlist,传进 find_in_set 函数。就可以查询出所有需要的递归数据了。...我们知道 MySQL 默认的结束符为分号,表明指令结束并执行。但是在函数体中,有时我们希望遇到分号不结束,因此需要暂时把结束符改为一个随意的其他值。...假设一个id的长度为10个字节,也能拼上一万个id了。 除此之外,使用 group_concat 函数还有一个限制,就是不能同时使用 limit 。如, ? 本来只想查5条数据来拼接,现在不生效了。

    3K20

    如何在 Python 中查找两个字符串之间的差异位置?

    在文本处理和字符串比较的任务中,有时我们需要查找两个字符串之间的差异位置,即找到它们在哪些位置上不同或不匹配。这种差异位置的查找在文本比较、版本控制、数据分析等场景中非常有用。...示例代码下面是一个示例代码,展示了如何使用 difflib 模块查找两个字符串之间的差异位置:from difflib import SequenceMatcherdef find_difference_positions...如果需要比较大型字符串或大量比较操作,请考虑使用其他更高效的算法或库。自定义差异位置查找算法除了使用 difflib 模块,我们还可以编写自己的算法来查找两个字符串之间的差异位置。...结论本文详细介绍了如何在 Python 中查找两个字符串之间的差异位置。我们介绍了使用 difflib 模块的 SequenceMatcher 类和自定义算法两种方法。...difflib 模块提供了一个强大的工具,可用于比较和处理字符串之间的差异,而自定义算法则允许根据具体需求实现特定的差异位置查找逻辑。

    3.4K20

    MySQL 如何实现递归查询?「建议收藏」

    find_in_set 函数 函数语法:find_in_set(str,strlist) str 代表要查询的字符串 , strlist 是一个以逗号分隔的字符串,如 (‘a,b,c’)。...此函数用于查找 str 字符串在字符串 strlist 中的位置,返回结果为 1 ~ n 。若没有找到,则返回0。...我想,是不是可以找到一个包含当前节点和所有子节点的以逗号拼接的字符串 strlist,传进 find_in_set 函数。就可以查询出所有需要的递归数据了。...,以及它的递归父节点,如下: 注意事项 我们用到了 group_concat 函数来拼接字符串。...假设一个id的长度为10个字节,也能拼上一万个id了。 除此之外,使用 group_concat 函数还有一个限制,就是不能同时使用 limit 。

    11.6K10

    【C++】P5734 【深基6.例6】文字处理软件

    插入片段,在文档中第 a 个字符前面插入字符串 str,并输出文档的字符串; 4 str:查找子串,查找字符串 str 在文档中最先的位置并输出;如果找不到输出 -1。...操作2:截取字符串 对于操作2,我使用了 substr(a, b) 函数来截取文档中的一部分。substr 函数接受两个参数,a 为起始位置,b 为截取长度。...操作4:查找子串位置 对于操作4,我使用了 find(str) 函数来查找子串 str 在文档中最早出现的位置。...查找操作: 在查找子串的部分,老师也使用了 find 函数,并且处理了找不到子串时返回 -1 的逻辑,和我的做法相同。...小结 本次文字处理软件题目考察了 C++ 中字符串的基本操作,特别是如何通过不同的方式处理字符串的拼接、截取、插入和查找。

    7710

    php面试题目100及最佳答案

    order 表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB; 8、优化查询语句 a用内连接代替子查询代替子查询,用sphinx代替like模糊查询 b最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作...1,确认服务器的硬件是否足够支持当前的流量 2,优化数据库的访问 3,禁止外部的盗链 4,控制大文件的下载 5,使用不同主机分流主要流量 6,使用流量分析统计软件 10.一个函数,能够遍历一个文件夹下的所有文件和子文件夹...单例模式: 保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库连接 简单工厂模式: 它具有创建对象的某些方法,可以使用工厂类创建对象,而不直接使用 new。...— strstr 函数的忽略大小写版本 strrchr — 查找指定字符在字符串中的最后一次出现 strpos — 查找字符串首次出现的位置 stripos — 查找字符串首次出现的位置(不区分大小写...) strripos — 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写) strrpos — 计算指定字符串在目标字符串中最后一次出现的位置 strlen — 获取字符串长度 strrev

    8.4K30

    day05-字符串

    函数名 含义 len(str) 返回字符串的长度(字符的个数) str.index(sub) 函数用于在字符串中查找子串sub的第一个匹配位置,并返回其索引值。...如果子串未找到,会引发ValueError异常 str.find(sub) 在字符串中查找子串的第一个匹配位置,并返回索引值,如果未找到则返回-1。...'l'在5-10 索引之间的第一次匹配索引 print(str.find('g')) # 字符不存在返回-1 # 输出结果 4 8 9 -1 find() 和index() 都是用于在字符串中查找子串...sub的方法,但是index查找不到的话会报错,而find不会报错,会返回-1。...结尾 还有很多函数,我们可以使用dir()函数来查看所有的函数 print(dir(str)) 5、字符串格式化 格式化需要结合print函数输出,简单意思就是用到%进行转换,先占个位置,然后把值放在后边替换之前占的位置

    21630

    string类(上)(解析各种成员函数)

    std::string提供了丰富的成员函数来支持字符串的各种操作,包括字符串的构造、赋值、连接、比较、查找、替换、插入、删除、访问字符、获取字符串大小和容量等。...append() 和 +=:在字符串末尾追加字符或字符串。 insert():在字符串的指定位置插入字符或字符串。 erase():删除字符串中的字符或子字符串。...replace():替换字符串中的字符或子字符串。 find()、rfind()、find_first_of()、find_last_of() 等:在字符串中查找字符或子字符串。...如果 pos(即查找函数返回的位置)不等于 std::string::npos,那么意味着找到了匹配项,且 pos 是匹配项在字符串中的起始位置(基于0的索引)。...begin()返回一个指向字符串第一个字符的迭代器,而end()返回一个指向字符串末尾“之后”位置的迭代器(即,一个“尾后迭代器”,它实际上不指向任何有效的字符,而是用作循环或算法的结束条件)。

    8310

    C++ ——string的模拟实现

    strcpy 会把 '\0' 拷贝过来 //使用memcpy函数进行拷贝的原因是memcpy函数不会自动补上'\0' // 而strcpy函数会在拷贝后自动补上'\0’, //把str里的len...strstr:在一个字符串中查找另一个字符串 ,返回子串在原串里第一个出现的位置 str1:原串 str2:子串 const char * strstr ( const char *...通过strstr函数来将str作为子串找到它的地址,然后sub的地址减去_str的地址就是我们要找的字符串的起始位置的下标 13. substr //从pos位置开始截取长度为len的字符再构造一个子串...// 这里不能用 strcpy 会把 '\0' 拷贝过来 //使用memcpy函数进行拷贝的原因是memcpy函数不会自动补上'\0' // 而strcpy函数会在拷贝后自动补上'\0’,...//strstr:在一个字符串中查找另一个字符串 // 返回子串在原串里第一个出现的位置 //str1:原串 str2:子串 //const char * strstr ( const

    5210

    C++find函数用法_MATLAB中find的用法

    C++中STL里提供了许多字符串操作的函数,下面是字符串查找方面的部分函数用法简介: 1.find() 查找第一次出现的目标字符串: #include #include中查找子串S2 cout<<ans<<endl; system(“pause”); } 说明:如果查找成功则输出查找到的第一个位置,否则返回-1; 查找从指定位置开始的第一次出现的目标字符串:...(s2, 2) ; //从S1的第二个字符开始查找子串S2 cout<<ans<<endl; system(“pause”); } 2.find_first_of() 查找子串中的某个字符最先出现的位置...find_first_of()功能差不多,只不过find_first_of()是从字符串的前面往后面搜索,而find_last_of()是从字符串的后面往前面搜索。...4.rfind() 反向查找字符串,即找到最后一个与子串匹配的位置 5.find_first_not_of() 找到第一个不与子串匹配的位置 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人

    1.1K30

    Python字符串的基本用法总结

    (1)一个小技巧     先来说个小技巧吧,对于怎么编写多行字符串,除了用三个连续的双引号外,还要一个小技巧,看下面代码。...那如何判断一个对象是不是字符串呢?应该使用isinstance(s,basestring),而不是isinstance(s,str)。...(b)查找与替换 count(sub[,start[,end]]):统计字符串里某个字符sub出现的次数。可选参数为在字符串搜索的开始与结束位置。这个数值在调用replace方法时用得着。...find(sub[,start[,end]]):检测字符串中是否包含子字符串sub,如果指定start(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回...对于查找某个字符串中是否有子串,不推荐使用index族和find族方法,推荐使用in和not in操作 (c)分切与连接 partition(sep):用来根据指定的分隔符将字符串进行分割,如果字符串包含指定的分隔符

    1.2K10

    深入理解JavaScript函数式编程

    //模拟map函数 对数组中对每一个元素遍历改变每一个元素的值 使用const 不希望函数被修改定义为常量 const map = (array, fn) => { let results =...查找数组中具有空白数组的函数 console.log(findSpace(['jonm Connm','Jone_Done'])); ❝闭包的本质就是内部函数可以访问外部函数的成员,而柯里化解决的是函数多个参数将函数进行分解的最小粒度的问题...,而是由函子完成 函子就是一个实现了map的契约对象 可以把函子想象成一个盒子,这个盒子里面封装了一个值 想要处理盒子中的值,需要盒子的map方法传递一个处理值的函数(纯函数),由这个函数来对值进行处理...IO 函子中的_value是一个函数,这里把函数作为值来处理;IO函子可以把不纯的动作存储到_value中,延迟执行这个不纯的操作(惰性执行),包装当前的操作把不纯的操作交个调用者处理 //IO 函子...Pointed 函子是实现了of静态方法的函子,of方法是为了避免使用new来创建对象,更深层的含义是of方法用来把值放到上下文Context(把值放到容器中,使用map来处理值) 其实上述将的函子都是

    4.3K30

    1.1 C++ STL 字符串构造函数

    使用find()函数在字符串str1中查找字符u第一次出现的位置,并将其赋值给变量x,如果查找到了,则使用substr()函数输出从字符u位置到字符串结尾处的子串。...使用find()函数在字符串str1中查找字符串"Source",并从下标3的位置开始查找,在找到的位置处使用substr()函数输出从该位置开始到字符串结尾处的子串。...使用find_first_of()函数在字符串str1中查找字符串"urc"中的第一个出现的字符,并将其位置输出。...使用find()函数查找字符@在字符串email中的位置,并将其赋值给变量pos。...读者需要注意,在使用substr()函数提取子串时,第一个参数表示子串的起始位置,第二个参数表示子串的长度。如果第二个参数不写,则默认提取从起始位置开始到字符串结尾处的字符。

    18520

    1.1 C++ STL 字符串构造函数

    使用find()函数在字符串str1中查找字符u第一次出现的位置,并将其赋值给变量x,如果查找到了,则使用substr()函数输出从字符u位置到字符串结尾处的子串。...使用find()函数在字符串str1中查找字符串"Source",并从下标3的位置开始查找,在找到的位置处使用substr()函数输出从该位置开始到字符串结尾处的子串。...使用find_first_of()函数在字符串str1中查找字符串"urc"中的第一个出现的字符,并将其位置输出。...使用find()函数查找字符@在字符串email中的位置,并将其赋值给变量pos。...读者需要注意,在使用substr()函数提取子串时,第一个参数表示子串的起始位置,第二个参数表示子串的长度。如果第二个参数不写,则默认提取从起始位置开始到字符串结尾处的字符。

    19530

    【自然语言处理】NLP入门(六):1、正则表达式与Python中的实现(6):字符串常用方法:find()、rfind()、index()、rindex()、count()、replace()

    : 函数(Function) 函数是一段可重复使用的代码块,它可以接受输入参数,并且在执行完任务后返回一个结果。...函数是独立的代码块,而方法是与类或对象相关联的函数。 方法依赖于类和对象的概念,而函数则是更一般的概念,不一定与特定的类或对象相关联。 6....[, end]]) str.rfind(sub[, start[, end]]) 参数说明 sub: 要查找的子串 start: 查找的开始位置索引,默认为0 end: 查找的结束位置索引(不包含该位置...),默认为字符串长度 功能 在字符串中查找子串sub首次出现的位置索引 find()从左往右查找,rfind()从右往左查找 如果找到子串,返回其首次出现位置的索引 如果没有找到,返回-1 示例 s =...5. count() 格式 str.count(sub[, start[, end]]) 参数说明 sub: 要统计的子串 start: 统计的开始位置索引,默认为0 end: 统计的结束位置索引(不包含该位置

    13110

    程序出错你让它返回啥?

    函数是代码的一个非常重要的编写单元,而函数的异常处理,又是我们在编写函数的时候,时刻都要考虑的,今天我们就聊一聊,如何设计函数在异常情况下的返回数据类型。...我个人觉得,尽管返回 NULL 值有诸多弊端,但对于以 get、find、select、search、query 等单词开头的查找函数来说,数据不存在,并非一种异常情况,这是一种正常行为。...对于查找数据不存在的情况,函数到底是该用 NULL 值还是异常,有一个比较重要的参考标准是,看项目中的其他类似查找函数都是如何定义的,只要整个项目遵从统一的约定即可。...再补充说明一点,对于查找函数来说,除了返回数据对象之外,有的还会返回下标位置,比如 Java 中的 indexOf() 函数,用来实现在某个字符串中查找另一个子串第一次出现的位置。...当函数返回的数据是字符串类型或者集合类型的时候,我们可以用空字符串或空集合替代 NULL 值,来表示不存在的情况。这样,我们在使用函数的时候,就可以不用做 NULL 值判断。

    50520

    Python 字符串子串定位性能比较

    本文想探讨的是在给定了key字段在字段列表中开始下标和key字段个数后,如何在整行字符串中定位到key字符串的起始位置。...解决这个问题,我想到了三种思路: 将整个字符串用"|"分割(split),并根据key字段的下标计算首尾两个"|"的位置; 使用(index/find)函数,通过设置搜索起始位置,按顺序逐个查找"|"字符的位置...这个思路我写了三种方法,分别用 index/find来实现,需要注意的是,index函数在未找到子串的情况下会抛出ValueError错误,需要用try except处理,而find在找不到子串的情况下返回...并且在查找下一个子串的方式上有少许不同,一种是当找到当前子串位置后,记录下该位置,然后下一次从本次找到的位置+1开始查找,另一种是每找到一个子串,就去掉前缀部分,然后下一次在剩下的字符串中查找。...正则表达式 re.finditer 方法会返回字符串中所有子串位置的迭代器 列表推倒式将遍历整个字符串并输出子串位置的列表 组合复杂函数的方法,首先用map扫描字符串中所有匹配子串的位置,不匹配的输出-

    4K10

    4.1 C++ Boost 字符串处理库

    find_first函数接收两个参数,第一个参数是待查找的字符串,第二个参数是要查找的目标子字符串,返回指向第一个匹配子字符串的迭代器,如果没有找到,返回末尾迭代器。...find_last函数则是在待查找的字符串中从后向前查找指定子字符串的第一次出现,同样返回指向子字符串的迭代器或末尾迭代器。...ifind_nth和ifind_last函数均利用不区分大小写的方式进行字符串查找,可以根据需要查找一定位置处的指定数量的子字符串。...replace_first函数用于在给定字符串中替换第一个匹配的子字符串,接收三个参数,第一个参数是源字符串,第二个参数是查找的目标子串,第三个参数是替换子串,函数返回被处理后的原字符串对象。...replace_nth函数用于替换源字符串中的指定位置的子字符串,接收四个参数,第一个参数是源字符串,第二个参数是要替换的子串,第三个参数是替换后的子串,第四个参数是指定要替换的子串的位置(从0开始计数

    33630
    领券