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

查找没有字典或计数器的重复单词

在没有字典或计数器的情况下查找重复单词,可以采用双指针的方法。

双指针法的基本思路是,维护两个指针i和j,初始时i和j都指向字符串的起始位置。然后,让指针j依次向后遍历字符串的每个字符,同时检查指针j所指的字符是否在指针i之前的子串中出现过。如果出现过,说明找到了重复单词;如果没有出现过,则将指针j指向的字符加入到当前子串中,继续向后遍历。

以下是示例代码:

代码语言:txt
复制
def find_duplicate_words(s):
    i = 0
    j = 0
    duplicate_words = []
    current_word = ""

    while j < len(s):
        if s[j] != ' ':
            current_word += s[j]
        else:
            if current_word != "":
                if current_word in s[i:j]:
                    duplicate_words.append(current_word)
                else:
                    i = j + 1
                current_word = ""
        j += 1

    return duplicate_words

该代码会返回一个列表,包含所有重复出现的单词。

这种方法的时间复杂度是O(n^2),其中n是字符串的长度。每次检查是否重复时,需要遍历指针i和j之间的子串,最坏情况下需要遍历的子串长度为O(n),所以总的时间复杂度是O(n^2)。

这是一个比较简单的解决方案,如果需要更高效的方法,可以考虑使用字典或计数器来记录单词的出现次数。

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

相关·内容

【原创】python倒排索引之查找包含某主题或单词的文件

倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。...test2.txt"],"自然语言":["test1.txt"],"处理":["test1.txt"],"计算机":["test2.txt"],"视觉":["test2.txt"]} 建立倒排索引后,我们要想查找包含某些单词的文件...open(file,'r',encoding='utf-8') as fp: word_list=fp.read().split(" ") #建立倒排索引,如果单词不在单词字典中...之后我们得到了关于文件索引次数的字典,我们按次数从大到小排列,然后取前几个作为我们最后的结果。...,不同单词间','隔开:") words = input().split(',') #获得文件名和文件名索引字典 files_name, files_dict = file_store

1.8K30

哈夫曼树、哈夫曼编码和字典树

执行流程         字典树(Trie 树)是一种特殊的树型数据结构,用于快速检索和查找字符串集合中的单词或前缀。它的执行流程如下: (1)初始化字典树,创建一个根节点,根节点不包含任何值。...重复该过程,直到遍历完整个字符串。 (3)在字典树中查找指定的单词或前缀。从根节点开始,依次遍历待查找的单词或前缀中的每个字符,如果存在当前字符对应的节点,则向下遍历;否则,直接返回空。...(4)如果是查找单词,则需要判断查找到的最后一个节点是否为一个单词的结束节点。如果是,则说明该单词存在于字典树中;否则,不存在。...(5)如果是查找前缀,则不需要判断最后一个节点是否为一个单词的结束节点,只需要返回查找到的最后一个节点的子树中所有单词即可。...字典树的优点是可以快速的插入、查找和删除字符串集合中的单词,时间复杂度为 O(m),其中 m 为单词的长度。

44110
  • 搜索引擎背后的数据结构和算法

    具体是这样做的:维护一个中心的计数器,每爬取到一个网页,就从计数器中拿一个号码,分配给这个网页,然后计数器加一。...只需要通过空格、标点符号等分隔符,将每个单词分割开来就可以了。 对于中文来说,分词就复杂太多了。介绍一种比较简单的思路,基于字典和规则的分词方法。 字典也叫词库,里面包含大量常用的词语。...维护一个计数器,每当从网页文本信息中分割出一个新单词的时候,就从计数器中取一个编号,分配给它,然后计数器加一。 在这个过程中,我们还需要使用散列表,记录已经编过号的单词。...在对网页文本信息分词的过程中,我们拿分割出来的单词,先到散列表中查找,如果找到,那就直接使用已有的编号;如果没有找到,再去计数器中拿号码,并且将这个新单词以及编号添加到散列表中。...这个文件的作用是,帮助我们快速地查找某个单词编号在倒排索引中存储的位置,进而快速地从倒排索引中读取单词编号对应的网页编号列表。 ?

    1.1K10

    Python中如何使用 collections 模块中高级数据结构如 namedtuple、deque

    deque 是线程安全的,适合用于需要频繁在两端操作的场景,比如实现队列或栈。使用场景deque 可以用于实现高效的队列或栈操作,适合需要在两端频繁添加或移除元素的场景。...它接收一个可迭代对象(如列表或字符串)并返回一个类似字典的对象,键是元素,值是出现的次数。使用场景Counter 非常适合用于统计元素出现次数,比如统计单词频率、字符频率等。...假设你要分析一篇文章的内容,统计每个单词的出现次数,找出最常出现的单词,并在滑动窗口中查找某些关键单词的序列位置。...使用 namedtuple 定义了一个结构体 WordInfo,用于保存单词及其出现次数,使代码更具可读性。使用 defaultdict(list) 存储了每个单词在文章中的索引位置,便于快速查找。...使用 deque 实现了一个滑动窗口,用于查找特定单词序列的位置。这个综合实例展示了 collections 模块中的几个数据结构如何协同工作,以简化代码逻辑并提高可读性。

    10010

    使用 Python 程序实现摩斯密码翻译器「建议收藏」

    加密 在加密的情况下,我们一次一个地从单词中提取每个字符(如果不是空格),并将其与存储在我们选择的任何数据结构中的相应摩斯密码匹配(如果您使用 python 编码,字典可以变成在这种情况下非常有用) 将摩斯密码存储在一个变量中...我们重复这个过程,直到我们遍历整个字符串 解密 在解密的情况下,我们首先在要解码的字符串末尾添加一个空格(这将在后面解释)。 现在我们继续从字符串中提取字符,直到我们没有任何空间。...一旦我们得到一个空格,我们就会在提取的字符序列(或我们的莫尔斯电码)中查找相应的英语字符,并将其添加到将存储结果的变量中。 请记住,跟踪空间是此解密过程中最重要的部分。...键的值可以从字典中访问,就像我们通过索引访问数组的值一样,反之亦然。...' 'citext' -> '存储单个字符的摩斯密码' 'i' -> '计算摩斯字符之间的空格' 'message' -> '存储要编码或解码的字符串 ''' # 表示摩斯密码图的字典 MORSE_CODE_DICT

    1.3K20

    使用 Python 程序实现摩斯密码翻译器

    加密 在加密的情况下,我们一次一个地从单词中提取每个字符(如果不是空格),并将其与存储在我们选择的任何数据结构中的相应摩斯密码匹配(如果您使用 python 编码,字典可以变成在这种情况下非常有用) 将摩斯密码存储在一个变量中...我们重复这个过程,直到我们遍历整个字符串 解密 在解密的情况下,我们首先在要解码的字符串末尾添加一个空格(这将在后面解释)。 现在我们继续从字符串中提取字符,直到我们没有任何空间。...一旦我们得到一个空格,我们就会在提取的字符序列(或我们的莫尔斯电码)中查找相应的英语字符,并将其添加到将存储结果的变量中。 请记住,跟踪空间是此解密过程中最重要的部分。...键的值可以从字典中访问,就像我们通过索引访问数组的值一样,反之亦然。...' 'citext' -> '存储单个字符的摩斯密码' 'i' -> '计算摩斯字符之间的空格' 'message' -> '存储要编码或解码的字符串 ''' # 表示摩斯密码图的字典 MORSE_CODE_DICT

    2.5K20

    20个值得学习的 Python 技巧

    str1="aabbccccdddd" set1=set(str1) new_str=''.join(set1) print(new_str) 4 重复打印字符串或列表 下面的代码中,对字符串或列表使用...Python 计数器跟踪容器中每个元素的频数, Counter()返回一个字典,元素作为键,频数作为值。 另外使用 most_common()函数来获取列表中的 出现次数最多的元素。...Counter(list1) print(count) print(count['b']) print(count.most_common(1)) 11 判断两个字符串是否为异序词 异序词是通过重新排列不同单词或短语的字母而形成的单词或短语...,添加 else 语句,会在 try 块中没有引发异常的情况下运行。...下面脚本中,两个字典被合并。在相交的情况下,使用第二个字典中的值。

    90920

    20个值得学习的 Python 技巧

    str1="aabbccccdddd" set1=set(str1) new_str=''.join(set1) print(new_str) 4 重复打印字符串或列表 下面的代码中,对字符串或列表使用...Python 计数器跟踪容器中每个元素的频数, Counter()返回一个字典,元素作为键,频数作为值。 另外使用 most_common()函数来获取列表中的 出现次数最多的元素。...Counter(list1) print(count) print(count['b']) print(count.most_common(1)) 11 判断两个字符串是否为异序词 异序词是通过重新排列不同单词或短语的字母而形成的单词或短语...,添加 else 语句,会在 try 块中没有引发异常的情况下运行。...下面脚本中,两个字典被合并。在相交的情况下,使用第二个字典中的值。

    70810

    如何在一场面试中展现你对Python的coding能力?

    return random.choice(all_words) 你应该重复调用get_random_word()以获取1000个随机单词,然后返回包含每个唯一单词的数据结构。...这意味着随着单词数量的增加,查找次数呈二次方式增长。换句话说,时间复杂度在O(N^2)的量级上增长。...使用.get()和.setdefault()在字典中定义默认值 最常见的编程任务之一涉及添加,修改或检索可能在字典中或可能不在字典中的项。...如果没有,则将它们添加到字典中,并将空列表作为默认值。然后将实际成绩附加到该学生的成绩列表中。...使用collections.Counter计算Hashable对象 假如你有一长串没有标点符号或大写字母的单词,你想要计算每个单词出现的次数。

    1.2K30

    如何在一场面试中展现你对Python的coding能力?| 技术头条

    return random.choice(all_words) 你应该重复调用get_random_word()以获取1000个随机单词,然后返回包含每个唯一单词的数据结构。...这意味着随着单词数量的增加,查找次数呈二次方式增长。换句话说,时间复杂度在O(N^2)的量级上增长。...使用.get()和.setdefault()在字典中定义默认值 最常见的编程任务之一涉及添加,修改或检索可能在字典中或可能不在字典中的项。...如果没有,则将它们添加到字典中,并将空列表作为默认值。然后将实际成绩附加到该学生的成绩列表中。...使用collections.Counter计算Hashable对象 假如你有一长串没有标点符号或大写字母的单词,你想要计算每个单词出现的次数。

    1.1K30

    如何在一场面试中展现你对Python的coding能力?

    return random.choice(all_words) 你应该重复调用get_random_word()以获取1000个随机单词,然后返回包含每个唯一单词的数据结构。...这意味着随着单词数量的增加,查找次数呈二次方式增长。换句话说,时间复杂度在O(N^2)的量级上增长。...使用.get()和.setdefault()在字典中定义默认值 最常见的编程任务之一涉及添加,修改或检索可能在字典中或可能不在字典中的项。...如果没有,则将它们添加到字典中,并将空列表作为默认值。然后将实际成绩附加到该学生的成绩列表中。...使用collections.Counter计算Hashable对象 假如你有一长串没有标点符号或大写字母的单词,你想要计算每个单词出现的次数。

    1.4K40

    Python基础知识点梳理

    注释 类型 语法 单行注释 以 # 开头,编程规范建议#后面跟一个空格 多行注释 用一对连续的三个引号,单引号或者双引号均可("""/’’’) 行与缩进 python与其他语言明显的区别是没有大括号...循环是python中常见的循环,用于让执行的代码按照指定次数重复执行,语法如下: 初始条件设置,通常是计数器 while 条件(判断计数器是否达到目标次数): 条件满足时候执行的代码...处理条件(计数器 + 1) 1 2 3 4 5 for循环 for循环可以方便地遍历列表,元组,字典等数据类型,比如遍历一个列表的代码片段如下: nameList = ["zhangsan", "lisi...每个单词的首字母大写)则返回True 05 str.isupper() 如果 string 所有区分大小写的字符都是大写,则返回True 06 str.islower() 如果...11 大小写 str.swapcase() 翻转字符串的大小写 字符串的查找和替换: 序号 方法 说明 01 str.count(str1, beg=0, end=

    1.4K10

    字典树简介

    文章目录 1.简介 2.性质 3.示例 4.用途 5.操作 插入 删除 查找 6.实现示例 树结构 创建树 查询单词或前缀的数量 在主函数中测试 7.小结 参考文献 1.简介 字典树(Trie)又名前缀树或单词查找树...4.用途 字典树可以被广泛应用于字符串检索和匹配问题,比如: 实现字符串自动补全和纠错功能。 在搜索引擎中实现关键词提示。 统计和查找文本中的特定单词或短语出现的次数。...如果该节点不是一个字符串节点,且其没有其他子节点,可以将该节点从其父节点的子节点列表中删除,并继续向上遍历父节点。 重复步骤3和4,直到所有需要删除的节点都被删除或者遍历到根节点为止。...需要注意的是,字典树的删除操作有可能会导致一些无用的节点残留在树中,因此为了维持字典树的空间效率,我们可以在插入和删除操作时对树进行压缩,即如果一个节点没有其他子节点,并且其父节点也没有其他子节点,则将该节点和其父节点合并成一个节点...+1 root.count++; } 查询单词或前缀的数量 //查找该单词是否存在,如果存在返回数量,不存在返回-1 public static int search(TrieNode root

    86930

    剑指Offer——Trie树(字典树)

    大家好,又见面了,我是你们的朋友全栈君。 剑指Offer——Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。...4、1000万字符串,其中有些是重复的,需要把重复的全部去掉,保留没有重复的字符串。请怎么设计和实现?...举例 下面以字典树的构建与单词查找为例。...(只有小写字母组成,不会有重复的单词出现),现在老师要他统计 * 出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). */ String[] strs = { "banana", "band...(只有小写字母组成,不会有重复的单词出现),现在老师要他统计 * 出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). */ String[] strs = { "banana", "band

    91210

    27个Linux文档编辑命令

    但ed文本编辑器对于编辑大文件或对于在shell脚本程序中进行文本编辑很有用。 Linux egrep命令 Linux egrep命令用于在文件内查找指定的字符串。...若在检查的文件中找到字典没有的词汇,ispell会建议使用的词汇,或是让你将新的词汇加入个人字典。 Linux jed命令 Linux jed命令用于编辑文本文件。...Linux look命令 Linux look命令用于查询单词。 look指令用于英文单字的查询。您仅需给予它欲查询的字首字符串,它会显示所有开头字符串符合该条件的单字。...Linux expr命令 expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。...Linux uniq命令 Linux uniq命令用于检查及删除文本文件中重复出现的行列。 uniq可检查文本文件中重复出现的行列。 Linux wc命令 Linux wc命令用于计算字数。

    2.3K60

    27个Linux文档编辑命令

    但ed文本编辑器对于编辑大文件或对于在shell脚本程序中进行文本编辑很有用。 Linux egrep命令 Linux egrep命令用于在文件内查找指定的字符串。...若在检查的文件中找到字典没有的词汇,ispell会建议使用的词汇,或是让你将新的词汇加入个人字典。 Linux jed命令 Linux jed命令用于编辑文本文件。...Linux look命令 Linux look命令用于查询单词。 look指令用于英文单字的查询。您仅需给予它欲查询的字首字符串,它会显示所有开头字符串符合该条件的单字。...Linux expr命令 expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。...Linux uniq命令 Linux uniq命令用于检查及删除文本文件中重复出现的行列。 uniq可检查文本文件中重复出现的行列。 Linux wc命令 Linux wc命令用于计算字数。

    3K60

    用于日常编程问题的 10 个 Python 代码片段

    dlroW ,olleH 此代码使用 Python 的切片功能,步长为 -1,以反转输入字符串中的字符序列。 查找列表中最常用的元素 有时,您必须标识列表中最常用的元素。...计算数的阶乘 数 n 的阶乘(表示为 n!)是所有正可积性小于或上升到 n 的项。...检查数字是否为质数 素数是大于 1 的数,除了 1 和自身之外没有除数。...合并两个词典 合并两个词典是一项常见的任务,尤其是在使用配置或设置时。您将能够使用 update() 策略或 {**dict1, **dict2} 语言结构组合两个词典。...如果存在重复键,dict2 中的值将覆盖字典 1 中的值。 从字符串中删除标点符号 处理文本数据时,可能需要从字符串中删除标点符号。

    30220

    华为机试HJ27-查找兄弟单词-C++实现

    HJ27 查找兄弟单词 题目描述: 描述 定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次), 而不添加、删除、修改原有的字母就能生成的单词。...现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么? 注意:字典中可能有重复单词。...数据范围:1≤n≤1000 ,输入的字符串长度满足 1≤len(str)≤10 , 1≤k<n 输入描述: 输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。...然后输入一个单词x 最后后输入一个整数k 输出描述: 第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。...cab cba bca,所以输出3 经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca 解题思路: 这是一道字符串的题目。

    46130
    领券