leetcode刷题之字符串处理

2023-11-19

3. Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:
Input: “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1.
Example 3:
Input: “pwwkew”
Output: 3
Explanation: The answer is “wke”, with the length of 3.
Note that the answer must be a substring, “pwke” is a subsequence and not a substring.

python解答

  • 思路一:暴力排序,从index=0开始寻找不重复的子字符串,当发现list中有相同字符时输出list的长度,一直循环到index=length(nums)-1,取程度最大的为输出。
    时间复杂度为O(n^2)
暴力遍历,双循环
        length = len(s)
        j = 0
        max1 = 0
        dict_1 = []
        for i in range(length):
            dict_1 = []
            j = 0
            for k in range(i, length):
                if s[k] in dict_1:
                    break
                j += 1
                dict_1.append(s[k])
            max1 = max(j, max1)
        return max1
  • 思路二:利用队列的思想,将字符串push进队列,遇到相同的字符时判断子字符串的长度,如果大于最大长度则更新最大长度,将相同字符和之前的字符都弹出队列之后继续循环加字符到队列中。
  • 时间复杂度为O(n)
 stack = []
        far = 0
        for i in range(len(s)):
            if s[i] in stack:
                length = len(stack)
                far = max(far, length)
                while s[i] in stack:
                    stack.pop(0)
            stack.append(s[i])
        length = len(stack)
        far = max(far, length)
        return far
  • 思路三: 在思路二的基础上,弹出队列的形式改为直接截断,耗时减少挺多。
stack = []
        far = 0
        for i in range(len(s)):
            if s[i] in stack:
                length = len(stack)
                far = max(far, length)
                begin = stack.index(s[i])
                stack = stack[begin+1:]
            stack.append(s[i])
        length = len(stack)
        far = max(far, length)
        return far

409. Longest Palindrome

Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that can be built with those letters.
This is case sensitive, for example “Aa” is not considered a palindrome here.
Note:
Assume the length of given string will not exceed 1,010.
Example:
Input:
“abccccdd”
Output:
7
Explanation:
One longest palindrome that can be built is “dccaccd”, whose length is 7.

  • 思路一:利用harsh表先存入所有的字符,当出现偶数个字符时,增加所有字符的长度,当出现奇数个字符时,flag变为1,再增加字符长度-1,最后返回值为length+flag
		length = 0
        flag = 0
        harsh = dict()
        for i in range(len(s)):
            if s[i] in harsh:
                harsh[s[i]] += 1
            else:
                harsh[s[i]] = 1
        # print(harsh)
        for char in harsh:
            if harsh[char] % 2 == 0:
                length += harsh[char]
            else:
                length += (harsh[char] - 1) 
                flag = 1
        return length + flag
  • 思路二:利用set,不断遍历原始字符串,当set中有相同字符时,说明肯定是成双出现的,此时长度加2;当set中没有相同字符时,将字符假如set中,最后成双的字符肯定都弹出了,如果set中还有字符的话肯定时单个的,所有当set长度不为0时最后的长度+1。
 		lists = set()
        num = 0
        for e in s:
            if e in lists:
                num += 2
                lists.remove(e)
            else:
                lists.add(e)
        if len(lists) > 0:
            return num + 1
        return num

290. Word Pattern

Given a pattern and a string str, find if str follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.
Example 1:
Input: pattern = “abba”, str = “dog cat cat dog”
Output: true
Example 2:
Input:pattern = “abba”, str = “dog cat cat fish”
Output: false
Example 3:
Input: pattern = “aaaa”, str = “dog cat cat dog”
Output: false
Example 4:
Input: pattern = “abba”, str = “dog dog dog dog”
Output: false
Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

  • 思路一: python 解答: 利用harsh表,将pattern与lists一一对应,每个pattern 只会对应一个lists中的元素,如果harsh表中有pattern且lists对应的元素和harsh表中的不一致时则返回False,否则返回True.
        harsh = {}
        lists1 = []
        lists = str.split(' ')
        if len(lists) != len(pattern):
            return False
        if len(lists) == 1:
            lists = lists[0]
        for i in range(len(pattern)):
            if pattern[i] in harsh:
                if lists[i] != harsh[pattern[i]]:
                    return False
            else:
                if lists[i] in lists1:
                    return False
                lists1.append(lists[i])
                harsh[pattern[i]] = lists[i]
        return True
  • 思路二:利用python的set和zip函数,假设pattern和str都是一一对应的,则他们的长度都会相等,否则就有多种搭配的可能。这种方法的时间复杂度比思路一还慢,但是思路很好。
        str1 = str.split(' ')
        if len(str1) != len(pattern):
            return False
        return len(set(zip(list(pattern), str1))) == len(set(pattern)) == len(set(str1))

49. Group Anagrams

Given an array of strings, group anagrams together.
Example:
Input: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Output:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]
Note:
All inputs will be in lowercase.
The order of your output does not matter.

python 解答:

  • 思路: 对strs中的元素进行字符串排序,排序相同的说明是同一个字符串,将同一个字符串放入字典的相同索引当中组成list,之后利用dict.values将所有的结果返回为list。
class Solution(object):
    def groupAnagrams(self, strs):
        """
        :type strs: List[str]
        :rtype: List[List[str]]
        """
        dicts = {}
        for str1 in strs:
            lists = list(str1)
            lists.sort()
            if str(lists) not in dicts:
                dicts[str(lists)] = []
            dicts[str(lists)].append(str1)
        return list(dicts.values())

187. Repeated DNA Sequences

All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: “ACGAATTCCG”. When studying DNA, it is sometimes useful to identify repeated sequences within the DNA.
Write a function to find all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule.
Example:
Input: s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
Output: [“AAAAACCCCC”, “CCCCCAAAAA”]

  • 思路:建立一个字典,将所有的10个的字符串作为键值,数量作为value存入字典当中;遍历字典,value大于等于2的说明是重复的子序列。复杂度为O(n)
        harsh = dict()
        for i in range(len(s)):
            str1 = s[i:i+10]
            if str1 in harsh:
                harsh[str1] += 1
            else:
                harsh[str1] = 1
        lists = []
        for i in harsh:
            if harsh[i] > 1:
                lists.append(i)
        return lists
  • 思路二: 类似于思路一,采用的是python的set集合,发现运行时间减慢了4倍,看来set的操作复杂度比字典的高不少。
		harsh1 = set()
        harsh = set()
        for i in range(len(s)-9):
            print('a')
            str1 = s[i:i+10]
            if str1 in harsh1:
                harsh.add(str1)
            else:
                harsh1.add(str1)
        return list(harsh)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode刷题之字符串处理 的相关文章

  • elasticsearch去重计数(distinct)

    如果需要针对ES索引统计某个字段上出现的不同值的个数时 可以使用cardinality聚合查询完成 GET urlAttributes search search type count aggs
  • 亚利桑那州立大学周纵苇:研习 U-Net ——现有的分割网络创新

    雷锋网AI研习社按 经典的 Encoder Decoder 结构在目标分割问题中展现出了举足轻重的作用 然而这样一个相对固定的框架使得模型在感受野大小和边界分割精度两方面很难达到兼顾 本次公开课 讲者以 U Net 为案例分析 总结现有的分
  • Python面试50题!面试巩固必看!

    题目001 在Python中如何实现单例模式 点评 单例模式是指让一个类只能创建出唯一的实例 这个题目在面试中出现的频率极高 因为它考察的不仅仅是单例模式 更是对Python语言到底掌握到何种程度 建议大家用装饰器和元类这两种方式来实现单例
  • Jenkins+RobotFramework 失败用例重执行方案

    背景 接口测试用例运行在Jenkins节点上 在某些情况下 比如网络波动等原因 会导致用例运行失败 此时会触发邮件和钉钉预警 通知给到责任人 按照现有策略 当本次构建失败时 会立马触发第二次构建活动 若第二次构建仍然失败 则会再次触发预警信
  • 编译原理_计算器_flex、bison实现(详细辅助理解)

    编译原理 计算器 flex bison实现 详细辅助理解 个人博客 https www yuque com ngp blog tuanh6 https www yuque com ngp blog tuanh6 P S 这篇文章只能助你理解
  • python在财务分析中的应用,用python做财务数据分析

    大家好 本文将围绕python在财务分析中的应用展开说明 用python做财务数据分析是一个很多人都想弄明白的事情 想搞清楚python与财务数据分析需要先了解以下几个事情 1 说明 Python 处理业财数据的应用场景 并写出相应代码 可
  • VS附加进程调试

    什么是附加进程调试 附加进程调试就是将当前的代码工程附加到一个电脑程序进程中进行调试运行 从而达到调试定位问题的目的 附加进程调试的场景 1 软件运行崩溃 无dump或者dump看不出关键信息 2 当前代码工程编译的库不作为启动项 而是作为

随机推荐

  • SpringBoot+MybatisPlus+Druid极速搭建项目原型

    前言 听说你又有新需求了 什么 又是对某些表的增删改查 什么 还要从数据库一直写到dao层 还要配置mapper xml文件 完事儿之后还要写service层 controller层 什么 遇到条件查询还要写dao层和xml文件中的sql语
  • vscode 如何运行pip_VS Code写Python的一些小技巧

    本文基于 VS Code 1 36 1 为什么要用 VS Code 用 PyCharm 不好吗 VS Code 是开源免费的 PyCharm 是收费的 VS Code 除了 Python 还可以写其他语言 PyCharm 不行 VS Cod
  • 代码迁移_三种类型的代码迁移

    代码迁移 随着代码变老 通常有必要对其进行现代化 有以下动机 我们找到了一种更好的方法 我们需要出于支持 许可或仅出于最佳实践的原因而更新核心库 技术 我们需要在更现代的基础架构上运行该软件 简而言之 几年前编写的软件很少能完美地在我们现有
  • 自变化折线图(两周数据)

  • 小饼干问题 find寻找字符串 substr截取字符串

    所有人的回复都由大写字母 小写字母与 组成 占一行 MJJ认为只要其中包含了连续的10个小写字母 zailaiyihe 就意味着这个人想要再来一盒 题目描述 现在MJJ准备给每一个想要 再来一盒 的人买一盒小饼干 他想知道总共需要买几盒小饼
  • 【多线程例题】顺序打印abc线程

    顺序打印 进阶版 方法一 三个线程竞争同一个锁 通过count判断是否打印 方法二 三个线程同时start 分别上锁 从a开始 打印后唤醒b 三个线程分别打印A B C 方法一 通过count计数打印 三个线程上同样的锁 打印一个 召唤所有
  • msi afterburner怎么调节风扇转速教程

    msi afterburner是集超频 信息检测和参数调节等诸多功能为一体的显卡调节控制软件 要怎么使用msi afterburner调节风扇转速呢 很多小伙伴都不清楚怎么设置吧 下面就来看看详细操作 1 根据Afterburner软件的检
  • java String 转utf-8编码

    Get XML String of utf 8 return XML Formed string public static String getUTF8XMLString String xml A StringBuffer Object
  • Docker学习笔记(四)-docker中的网络与存储

    前言 要了解docker的网络和存储 首先需要知道docker的资源隔离机制 namespace 让某个特定的全局系统资源通过抽象方法使namespace 中的进程看起来拥有它们自己的隔离的全局系统资源实例 The purpose of e
  • 白盒测试怎么做?

    目录 前言 一 什么是白盒测试 二 白盒测试的分类 三 白盒测试的设计方法 四 白盒测试静态方法 五 白盒测试动态方法 六 白盒测试的特点 七 总结 前言 在企业内部 软件测试工程师基本处于 双高 地位 即地位高 待遇高 可以说他们的职业前
  • mysql yum的时候报错处理方法

    报错内容 警告 var cache yum x86 64 7 mysql57 community packages mysql community server 5 7 37 1 el7 x86 64 rpm 头V4 RSA SHA256
  • 键盘的hid描述符例子

    譬如有如下的Report Descriptor 譬如有如下的Report Descriptor C C code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  • 【无标题】乌邦图基础

    1 gt ubuntu的操作 图形界面 当我们ubuntu开启时 会自动进入桌面 桌面拥有很多图标 可以直接通过鼠标点击来完成操作 只适用于不走开发型的纯小白 成本很高 字符界面 没有其他任何的图案和标志 只有黑漆漆的对话框 和冰冷的字眼
  • 基于深度学习实现实时视频目标检测

    前言 实时视频目标检测是计算机视觉领域的研究热点之一 其应用场景包括智能监控 自动驾驶 机器人视觉等多个领域 深度学习技术的快速发展使得实时视频目标检测变得更加可行和准确 本文提出一种基于深度学习实现的实时视频目标检测系统 使用Python
  • 服务器运行python代码报错:intall python Extension

    当我安装时候又报错 WARNING Retrying Retry total 4 connect None read None redirect None status None after connection broken by New
  • 学生管理系统(C语言)

    说明 本程序的基本功能由单链表实现 满足基本的增删改查等功能 包括对文件的读写 由于测试数据较少 项目的鲁棒性可能不是很好 基本功能 退出 输入成绩 计算每名学生加权平均成绩 计算每门课程平均分 按分数降序排列 按学号升序排序 按姓名在字典
  • 如何通过手机拍照生成三维模型

    使用过易模的用户都知道 易模是通过手机扫描拍摄来进行建模的 而手机拍照建模是除扫描拍摄建模方式外迭代升级的一种全新的建模方式 使用手机拍照来进行建模 我们只需要按照要求拍摄并且上传所需建模物体的照片 系统就会自动生成我们所拍摄的物体模型 目
  • Jenkins免密登录gitlab拉取代码

    折腾了一下午 终于弄好了 网上很多博客写的都不清楚 所以记录一下 环境说明 服务器 说明 192 168 199 1 Jenkins 192 168 199 2 gitlab 操作步骤 1 生成公匙 在jenkins服务器执行 ssh ke
  • 2022年华中杯A题(暂时做完第一小问,附完整Python源码)

    目的 虽然比赛时间过去了 但还是可以拿来练一练优化问题的解决 加强自己对于优化算法的巩固 文章目录 目录 目的 前言 一 题目 二 思路 1 第一小题 分批算法 三 程序 1 计算相似度的函数 2 分批算法主要部分 初始化 1 首先生成想要
  • leetcode刷题之字符串处理

    3 Longest Substring Without Repeating Characters Given a string find the length of the longest substring without repeati