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

我必须在找到图案的地方打印索引。如果string = "ABCABCDEABCDEA“和pattern = "ABCD",则输出将为4和9

根据题目中的要求,我将回答问题并提供相关的知识和腾讯云产品链接。

题目中给出了一个字符串string和一个模式pattern,要求找到模式在字符串中的索引位置。

首先,我们可以使用字符串匹配算法来解决这个问题。一个常用的算法是KMP算法,它可以在O(n+m)的时间复杂度内完成匹配,其中n是字符串的长度,m是模式的长度。

KMP算法的基本思想是通过构建一个部分匹配表(Partial Match Table),来避免在匹配过程中出现不必要的回溯。部分匹配表记录了模式中每个位置的最长公共前后缀的长度。

具体的步骤如下:

  1. 构建部分匹配表:遍历模式字符串,计算每个位置的最长公共前后缀的长度。
  2. 在字符串中进行匹配:使用两个指针i和j分别指向字符串和模式的当前位置,进行匹配。
    • 如果当前字符匹配成功,则i和j同时向后移动一位。
    • 如果当前字符匹配失败,根据部分匹配表的信息,将模式字符串向右移动j - 部分匹配值的位置,继续匹配。

根据题目给出的例子,我们可以进行具体的计算: string = "ABCABCDEABCDEA" pattern = "ABCD"

  1. 构建部分匹配表:
    • 对于模式字符串"ABCD",部分匹配表为[0, 0, 0, 0],因为每个字符前面没有公共前后缀。
  • 在字符串中进行匹配:
    • 初始时,i = 0,j = 0。
    • 比较string[i]和pattern[j],发现匹配成功,i和j同时向后移动一位。
    • 继续比较string[i]和pattern[j],发现匹配成功,i和j同时向后移动一位。
    • 继续比较string[i]和pattern[j],发现匹配成功,i和j同时向后移动一位。
    • 继续比较string[i]和pattern[j],发现匹配成功,i和j同时向后移动一位。
    • 此时,j等于模式字符串的长度,说明找到了一个匹配,记录当前的索引位置。
    • 继续比较string[i]和pattern[j],发现匹配失败,根据部分匹配表的信息,将模式字符串向右移动j - 部分匹配值的位置,继续匹配。
    • 重复上述步骤,直到遍历完整个字符串。

根据上述步骤,我们可以得到模式在字符串中的索引位置为4和9。

腾讯云相关产品和产品介绍链接:

  • 云服务器(Elastic Cloud Server,ECS):https://cloud.tencent.com/product/cvm
  • 云数据库MySQL版(TencentDB for MySQL):https://cloud.tencent.com/product/cdb_mysql
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 腾讯云物联网平台(IoT Explorer):https://cloud.tencent.com/product/ioe
  • 腾讯云移动开发平台(Mobile Development Platform,MDP):https://cloud.tencent.com/product/mdp
  • 腾讯云对象存储(Cloud Object Storage,COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(Tencent Blockchain as a Service,TBaaS):https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙(Tencent Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅供参考,具体的产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python re正则表达式

返回None,假设匹配成功,返回且只返回第一个match object(一会再介绍match object使用方法) re.search(pattern, string, flags=0) 扫描整个...re.findall(pattern, string, flags=0) 找到RE 匹配全部子串,并把它们作为一个列表返回。这个匹配是从左到右有序地返回。 假设无匹配。...search(),finditer()函数返回值。 属性: string: 匹配时使用文本。 re: 匹配时使用Pattern对象。 pos: 文本中正則表達式開始搜索索引。...值与Pattern.match()Pattern.seach()方法同名參数同样。 endpos: 文本中正則表達式结束搜索索引。...值与Pattern.match()Pattern.seach()方法同名參数同样。 lastindex: 最后一个被捕获分组在文本中索引。假设没有被捕获分组,将为None。

32920

Date转换

文本 :文字样式是根据所使用图案字母数确定。 少于4图案字母将使用short form 。 完全4图案字母将使用full form 。 完全5个图案字母将使用narrow form 。...图案字母’L’,'c’’q’指定文本样式独立形式。 编号 :如果字母数为1,使用最小位数输出该值,而不填充。 否则,使用数字计数作为输出字段宽度,根据需要使用零填充值。...纳秒值有九位数,因此模式字母计数从1到9.如果小于9,那么纳秒值将被截断,只有最高有效位被输出。 在严格模式下解析时,解析数字数量必须与模式字母数量相匹配。...区域名称 :输出时区ID显示名称。 如果字母数为1,2或3,输出短名称。 如果字母数为4输出全名。 五个或更多字母抛出IllegalArgumentException 。...四个字母输出full形式局部偏移量,相当于Offset-O四个字母。 如果偏移为零,输出将为相应局部偏移文本。 五个字母输出小时,分钟,可选第二个(如果非零),冒号。

1.3K20
  • python正则表达式模块

    如果指定了DOTALL标志,匹配包括换行符在内任何字符 '^'(Caret) 匹配以字符串开头,找到后返回匹配字段 import re print(re.findall("^abc","abcsaf...前面的字符串.匹配到后就结束,不会在匹配后边结果 如ab+?只能匹配ab.如果ab+.就可以匹配ab,abbb也就是a加任意数量b但是如果事ab+? 只能匹配到ab便结束了....所有字符,如果带有-必须是ASCII码表中从小到大顺序进行排列.如[9-0]是错误 \A 匹配以哪个字符串或字符开头,如下: import re print(re.findall("\Aab","...c', '_', 'd', 'e', 'f'] re.search(patternstring, flags=0):根据表达式规则查找字符串,如果找不到匹配返回None,如果找到返回匹配到对象。...(patternstring, flags=0):在整个字符串内匹配表达式,返回匹配到结果。

    60720

    常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)

    大家好,是辰哥~ 本文带大家学习正则表达式,并通过python代码举例讲解常用正则表达式 最后实战爬取小说网页:重点在于爬取网页通过正则表达式进行解析。...(2)如果每一个字符串都能匹配,成功;一旦有匹配不成功字符匹配失败。 正则表达式规则 常见规则 语法 说明 实例 完整匹配 \ 转义符 a\\c a\c ....通配符,匹配任意除换行符外字符 a.c abc […] 字符集,对应位置是字符集中任意字符 a[bcd]ef abefacefadef \d [0-9],表示一位数字 a\dc a4c \D [^0-...如果中途匹配pattern成功,终止匹配,返回匹配结果。如果无法匹配或者到字符串末尾还未匹配到,返回None。...", html,re.S)[2:-1][0].split("")[0] # 打印输出 print(title) print(text) """ 结果: 第一章

    1.7K30

    Python 算法交易秘籍(二)

    原文:zh.annas-archive.org/md5/010eca9c9f84c67fe4f8eb1d9bd1d316 译者:飞龙 协议:CC BY-NC-SA 4.0 第三章:获取金融数据...(请注意,如果您选择了与使用经纪人 API 获取历史数据配方中不同持续时间historical_data,传递给historical_data.iloc索引将不同)。...在每个蜡烛间隔结束时,如果股价低于前n个 Line Break 蜡烛中最低价,形成一个红色蜡烛。 在每个蜡烛间隔结束时,如果既不满足点 3 也不满足点 4,则不形成蜡烛。...在 步骤 3 4 中,你选择性地从数据中提取一个绿色蜡烛一个红色蜡烛(请注意,传递给historical_data.iloc索引是从本章第一个配方中获取)。...(请注意,如果您选择本章第一个配方中获取historical_data不同持续时间,传递给historical_data.iloc索引将不同。)

    29920

    R语言基础教程——第9章:字符串操作

    对于grep函数,结果只有匹配或者不匹配,因此匹配时输出向量中该元素下标,如果是单个字符就输出1,对于grepl,grep其实一样,不过输出是逻辑值,匹配就是T,不匹配就是F。...参数“useBytes”默认是F,表示按字符查找,如果是T表示按字节查找,对于中文字符影响还是很大。参数“invert ”默认为F,表示正常查找,如果为T查找模式补集。...这些函数参数都比较类似,但是输出各不一样,grep输出向量下标,实际上就是找到与没找到,grepl返回逻辑值更能说明问题。...regexprgregexpr被使用似乎比较多,因为它们很像其他语言中instr函数,可以查找到某些字符在字符串中出现位置,不过觉得用处并不是很大,因为通常情况下寻找某字符位置目的就是为了做相关处理...(10)“[]”还可以用来匹配多个字符,如果不使用任何分隔符号,搜寻这个集合,比如在sub("[ab]","",c("abcd","dcba"))中,"a|b"效果一样。

    2.6K10

    python字符串String模块

    >字符串搜索定位与替换 >>> str='string lEARn' >>> str.find('z')              #查找字符串,没有返回-1,有返回查到到第一个匹配索引 -1 >...,右侧是希望被格式化值; 注意: 只有元组字典可以被格式化为一个以上值,列表其他序列会被格式化为一个值; 转换说明符,用于标记需要插入转换值位置; 如果在格式化字符串中要输出百分号,则需要使用...u 不带符号十进制 x 不带符号十六进制(小写) X 不带符号十六进制(大写) e 科学计数法浮点数(小写) E 科学计数法浮点数(大写) f,F 十进制浮点数 g 如果指数大于-4或者小于精度值...e相同,否则f相同 G 如果指数大于-4或者小于精度值E相同,否则F相同 C 单字符(接受整数或者单字符字符串) r 字符串(使用repr转换任意Python对象) s 字符串(使用str转换任意...字符串方法 4.1 find 说明:用于在长字符串中查找子字符串,如果找到返回子字符串在左 侧第一次出现索引,没找到返回-1,在查找时,还可以指定在长字符串 中查找范围,提供起始索引结束索引作为查找参数

    95410

    正则 test() 匹配一个“坑”

    这是参与「掘金日新计划 · 6 月更文挑战」第24天,点击查看活动详情 ---- 本瓜相信你一定经常用以下这种最最简单正则来判断字符串中是否存在某个子字符(别说了,就是) const pattern...不急,现在来让你猜一下,以下代码输出?...每次当我们用正则 RegExp.exec() RegExp.test() 进行匹配时候,如果返回为 true,lastIndex 属性值会发生变化,会变成正确匹配子字符串最后位置,并将此位置作为下次检索起始点...如果返回为 false,lastIndex 重置为 0 ; 所以,我们这样打印试试就知道了: const pattern = /ab/g console.log(pattern.test("abcd")...".match(pattern)) // ['ab', 'ab'] console.log("123".match(pattern)) // null match 是匹配更优解,不用手动清理,存在悉数返回成数组

    63630

    【SpringBoot-2】SLF4J+logback进行日志记录

    例如,在项目中使用了 SLF4J 记录日志,并且绑定了 Log4j(即导入相应依赖),日志会以 Log4j 风格输出;后期需要改为以 Logback 风格输出日志,只需要将 Log4j 替换成...个人理解,appender作用类似于构造一个日志模板,而logger是真正日志输出者,使用某个appender作为模板去写日志。...%i:当日志量过大,导致同一天生成两个及以上日志文件时,这个属性将为日志名称加一个索引作为后缀,以加以区分。 .log.zip:指定存档日志文件压缩格式。..." /> name:写属性,指定具体包或类,被指定包或类中日志输出将遵从该logger规定配置。...level:非写属性,指定日志输出级别,该级别将覆盖root配置输出级别。 addtivity:非写属性,是否向上级loger传递打印信息。默认是true。

    2.7K31

    正则表达式学习笔记

    or meaningful } 1.4 用于模式匹配String方法 str.search(pattern) 它参数是一个正则表达式,返回第一个与之匹配子串起始位置,如果找不到匹配子串,它将返回.../ 第三次打印789 console.log(v); }); /** * 第一个参数表示匹配字符串 * 第二个参数表示匹配元组(如果没有元组,实际上回调函数只有三个值,即此时d值会为...null,匹配成功会返回一个数组,包含所有匹配值;如果是非全局模式,返回第一个匹配项数组信息,数组中第一个元素为匹配字符串,余下为匹配捕获组,另外这个数组还有两个属性,indexinput,index...相关术语与操作符 2.1 精准匹配 如果一个字符不是特殊字符或操作符,表示该字符必须在表达式中出现。...(reg.test('3.3333')); // false 4.6 匹配中文 var str = '223是abc一只猫234', reg = /[\u4E00-\u9FA5\uf900

    1.4K40

    Python基础之str常用方法、for循环

    初学python,有些地方可能还不够明白,希望各位看官发现错误后留言指正!...一.字符串索引与切片   注:字符串第一位索引值是0   1.索引案例 1 s = 'abcd' 2 s1 = s[0] 3 print(s1)#输出a   2.切片案例,注:顾头不顾尾,即指定最后一个索引字符取不到...(s4,s5)#都会输出整个字符串 5 6 print(s[0:0])#输出一个空字符串,不会报错   5.步长:默认步长为1,若需要间隔固定间距取字符,步长=间距+1 ,格式:[首下标:尾下标...s1 = s.startswith('b',1,3)#判断切片后'bc'是否以字符'b'开头 七.找出字符串里是否有某个字符或连续字符串,若找到返回其第一个字符索引(下标),找不到返回-1 1...还有一个方法index,它find作用类似,通过元素找索引,不同点是:找不到指定字符则会报错!

    86120

    sed命令工作原理及命令备忘

    所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令...处理完毕,除非加了-n参数,把现在pattern space打印出来,在后边打印曾去掉换行符。 3....s/abcd/efgh/g命令,即将每一行里abcd替换成efgh, 同时因为有/g选项,一行里如果出现多个abcd, 就每一个都会替换。...{/This/{/fish/d}}命令,这是个嵌套命令,意思是先匹配/This/,匹配成功行再尝试匹配/fish/,如果又匹配成功,删除该行。...,删除该行,否则再尝试匹配/fish/,如果匹配成功,删除该行。

    98790

    Python 学习入门(13)—— 正则表达式

    python >>> m.groups() ('abc', 'b') 模式中逆向引用允许你指定先前捕获组内容,该组也必须在字符串当前位置被找到。...endpos: 文本中正则表达式结束搜索索引。值与Pattern.match()Pattern.seach()方法同名参数相同。 lastindex: 最后一个被捕获分组在文本中索引。...如果没有被捕获分组,将为None。 lastgroup: 最后一个被捕获分组别名。如果这个分组没有别名或者没有被捕获分组,将为None。..., endpos]]) | re.match(pattern, string[, flags]):  这个方法将从stringpos下标处起尝试匹配pattern如果pattern结束时仍可匹配,返回一个...从stringpos下标处起尝试匹配pattern如果pattern结束时仍可匹配,返回一个Match对象;若无法匹配,则将pos加1后重新尝试匹配;直到pos=endpos时仍无法匹配返回None

    1.2K40

    Java日志框架:logback详解

    为什么使用logback 记得前几年工作时候,公司使用日志框架还是log4j,大约从16年中到现在,不管是参与别人已经搭建好项目还是自己主导项目,日志框架基本都换成了logback,总结一下...,logback大约有以下一些优点: 内核重写、测试充分、初始化内存加载更小,这一切让logback性能log4j相比有诸多倍提升 logback非常自然地直接实现了slf4j,这个严格来说算不上优点...,扫描过程快且安全,它并不需要另外创建一个扫描线程 支持自动去除旧日志文件,可以控制已经产生日志文件最大数量 总而言之,如果大家项目里面需要选择一个日志框架,那么个人非常建议使用logback。...: 表示写入文件名,可以使相对目录也可以是绝对目录,如果上级目录不存在自动创建 如果为true表示日志被追加到文件结尾,如果是false表示清空文件 节点,就像上面演示,用来设置日志输入格式,使用“%+转换符"方式,如果输出"%"必须使用"\%"对"%"进行转义。

    88620
    领券