python字符串处理15题-刷题

题目一:最长无重复子串长度
给定一个字符串,找出其中不含有重复字符的最长子串的长度。
示例:
输入: "abcabcbb"
输出: 3
解释: 最长无重复子串是 "abc",长度为 3。
解答:

def length_of_longest_substring(s):max_length = 0start = 0char_index = {}for i, char in enumerate(s):if char in char_index and char_index[char] >= start:start = char_index[char] + 1char_index[char] = imax_length = max(max_length, i - start + 1)return max_length


    
题目二:验证回文字符串
给定一个字符串,验证它是否是回文串。只考虑字母和数字,忽略大小写。
示例:
输入: "A man, a plan, a canal: Panama"
输出: True
解答:

def is_palindrome(s):s = ''.join(filter(str.isalnum, s)).lower()return s == s[::-1]


    
题目三:翻转字符串中的单词顺序
给定一个字符串,逐个翻转字符串中的每个单词。
示例:
输入: "the sky is blue"
输出: "blue is sky the"
解答:

def reverse_words(s):words = s.split()return ' '.join(words[::-1])


    
题目四:字符串转换整数 (atoi)
实现一个函数来将字符串转换成整数。
示例:
输入: "42"
输出: 42
解答:

def my_atoi(s):s = s.strip()if not s:return 0sign = 1if s[0] in ['+', '-']:if s[0] == '-':sign = -1s = s[1:]num = 0for char in s:if not char.isdigit():breaknum = num * 10 + int(char)num = min(max(num * sign, -2**31), 2**31 - 1)return num


    
题目五:最长回文子串
给定一个字符串,找到其中最长的回文子串。
示例:
输入: "babad"
输出: "bab"
解答:

def longest_palindrome(s):def expand_around_center(left, right):while left >= 0 and right < len(s) and s[left] == s[right]:left -= 1right += 1return s[left + 1:right]longest = ""for i in range(len(s)):# 奇数长度回文串palindrome_odd = expand_around_center(i, i)# 偶数长度回文串palindrome_even = expand_around_center(i, i + 1)if len(palindrome_odd) > len(longest):longest = palindrome_oddif len(palindrome_even) > len(longest):longest = palindrome_evenreturn longest


题目一:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。 示例:
输入: ["flower","flow","flight"]
输出: "fl"
解答:

def longest_common_prefix(strs):if not strs:return ""min_length = min(len(s) for s in strs)common_prefix = ""for i in range(min_length):char = strs[0][i]if all(s[i] == char for s in strs):common_prefix += charelse:breakreturn common_prefix


    

题目二:字符串转换
给定一个字符串,将该字符串中的大写字母转换为小写字母,小写字母转换为大写字母。 示例:
输入: "Hello World"
输出: "hELLO wORLD"
解答:

def swap_case(s):return s.swapcase()


    

题目三:最后一个单词的长度
给定一个字符串,包含多个单词,其中单词由空格分隔。找出最后一个单词的长度。 示例:
输入: "Hello World"
输出: 5
解答:

def length_of_last_word(s):words = s.split()if words:return len(words[-1])return 0

题目四:反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转字符串中的元音字母。 示例:
输入: "hello"
输出: "holle"
解答:

def reverse_vowels(s):vowels = 'aeiouAEIOU's = list(s)left, right = 0, len(s) - 1while left < right:while left < right and s[left] not in vowels:left += 1while left < right and s[right] not in vowels:right -= 1s[left], s[right] = s[right], s[left]left += 1right -= 1return ''.join(s)

题目五:验证有效的括号序列
给定一个只包含三种字符的字符串:'(', ')','{','}','[',']',判断字符串是否有效。 示例:
输入: "()[]{}"
输出: True
解答:

 

def is_valid(s):stack = []mapping = {')': '(', '}': '{', ']': '['}for char in s:if char in mapping:top_element = stack.pop() if stack else '#'if mapping[char] != top_element:return Falseelse:stack.append(char)return not stack

题目六:字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 示例:
输入: "leetcode"
输出: 0
解答:

def first_uniq_char(s):char_count = {}for char in s:char_count[char] = char_count.get(char, 0) + 1for i, char in enumerate(s):if char_count[char] == 1:return ireturn -1

题目七:字符串中的所有变位词
给定两个字符串 s 和 p,找到 s 中所有 p 的变位词的起始索引。 示例:
输入: s = "cbaebabacd", p = "abc"
输出: [0, 6]
解答:

def find_anagrams(s, p):p_count = [0] * 26s_count = [0] * 26result = []for char in p:p_count[ord(char) - ord('a')] += 1for i in range(len(s)):s_count[ord(s[i]) - ord('a')] += 1if i >= len(p):s_count[ord(s[i - len(p)]) - ord('a')] -= 1if s_count == p_count:result.append(i - len(p) + 1)return result

题目八:分割回文串
给定一个字符串,将字符串分割成一些子串,使每个子串都是回文串。返回所有可能的分割方案。 示例:
输入: "aab"
输出: [["aa","b"], ["a","a","b"]]
解答:

def partition(s):def is_palindrome(sub):return sub == sub[::-1]def backtrack(start, path):if start == len(s):result.append(path[:])returnfor end in range(start + 1, len(s) + 1):if is_palindrome(s[start:end]):path.append(s[start:end])backtrack(end, path)path.pop()result = []backtrack(0, [])return result

题目九:最小覆盖子串
给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串。 示例:
输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"
解答:

def min_window(s, t):from collections import Counterif not s or not t:return ""t_count = Counter(t)required_chars = len(t_count)left, right = 0, 0formed_chars = 0window_count = {}ans = float("inf"), None, Nonewhile right < len(s):char = s[right]window_count[char] = window_count.get(char, 0) + 1if char in t_count and window_count[char] == t_count[char]:formed_chars += 1while left <= right and formed_chars == required_chars:char = s[left]if right - left + 1 < ans[0]:ans = right - left + 1, left, rightwindow_count[char] -= 1if char in t_count and window_count[char] < t_count[char]:formed_chars -= 1left += 1right += 1return "" if ans[0] == float("inf") else s[ans[1]:ans[2] + 1]

题目十:字符串的排列
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 示例:
输入: s1 = "ab" s2 = "eidbaooo"
输出: True
解答:

def check_inclusion(s1, s2):from collections import Counters1_count = Counter(s1)window_count = Counter()left, right = 0, 0required_chars = len(s1)while right < len(s2):char = s2[right]window_count[char] = window_count.get(char, 0) + 1if char in s1_count and window_count[char] <= s1_count[char]:required_chars -= 1while left <= right and window_count[s2[left]] > s1_count[s2[left]]:window_count[s2[left]] -= 1left += 1if required_chars == 0:return Trueright += 1return False

题目:频率最高的单词
给定一段英文文章的文本,找出其中出现频率最高的前k个单词,并返回这些单词按频率降序排列的列表。请忽略单词的大小写。
示例:
输入: text = "This is a sample text. This text contains some sample words."
     k = 3
输出: ["sample", "this", "text"]
解答:


def top_k_frequent_words(text, k):from collections import Counter  # 导入Counter类,用于统计元素频率import re  # 导入正则表达式模块# 去除标点符号,转换为小写,然后按空格分割文本words = re.findall(r'\w+', text.lower())  # 使用正则表达式找出所有单词,转换为小写# 统计单词频率word_count = Counter(words)  # 使用Counter统计单词出现的频率# 按频率降序排列单词sorted_words = sorted(word_count, key=lambda word: (-word_count[word], word))# 使用sorted函数对单词按照频率降序排列,如果频率相同则按字典序升序排列# 返回前k个单词return sorted_words[:k]  # 返回按照要求排序后的前k个单词
示例:给定文本:"This is a sample text. This text contains some sample words." 和 k = 3。文本处理:去除标点符号后得到:"this is a sample text this text contains some sample words"转换为小写:"this is a sample text this text contains some sample words"按空格分割:["this", "is", "a", "sample", "text", "this", "text", "contains", "some", "sample", "words"]单词统计:
统计后得到:{"this": 2, "is": 1, "a": 1, "sample": 2, "text": 2, "contains": 1, "some": 1, "words": 1}按频率降序排列:
排序后得到:["sample", "text", "this", "is", "a", "contains", "some", "words"]返回前k个单词:
返回前3个单词:["sample", "text", "this"]综合起来,题目要求将一段英文文本进行处理,找出其中频率最高的前k个单词,并按频率降序排列返回。
解答思路:文本处理: 首先,我们需要对给定的英文文本进行处理。我们要去除标点符号,将所有单词转换为小写,并按空格分割文本,以便后续的单词统计。单词统计: 使用Python的collections.Counter模块,我们可以方便地统计文本中每个单词的出现次数。将单词作为键,出现次数作为值,创建一个单词计数器。按频率降序排列: 接下来,我们将计数器中的单词按照频率降序排列。这里需要注意,如果频率相同,我们按字典序排列单词,以保证结果的正确性。返回前k个单词: 最后,从排序后的单词列表中,取出前k个单词作为答案。

题目一:最小覆盖子串的变体
给定一个字符串s和一组字符t,找出s中包含t中所有字符的最小子串。要求时间复杂度为O(n)。

输入: s = "ADOBECODEBANC", t = "ABC"
输出: "BANC"

def min_window_substring(s, t):from collections import Countert_count = Counter(t)  # 统计目标字符 t 中每个字符的频率required_chars = len(t_count)  # 需要匹配的不同字符的数量left, right = 0, 0  # 滑动窗口的左右指针formed_chars = 0  # 已经匹配到的字符数量window_count = {}  # 滑动窗口中字符的频率计数ans = float("inf"), None, None  # 存储结果的变量,初始化为一个极大值min_window = ""  # 最小覆盖子串while right < len(s):char = s[right]  # 右指针指向的字符window_count[char] = window_count.get(char, 0) + 1  # 统计字符频率if char in t_count and window_count[char] == t_count[char]:formed_chars += 1  # 已匹配字符的数量满足要求while left <= right and formed_chars == required_chars:char = s[left]  # 左指针指向的字符if right - left + 1 < ans[0]:ans = right - left + 1, left, right  # 更新最小覆盖子串的长度和位置min_window = s[left:right+1]  # 更新最小覆盖子串window_count[char] -= 1  # 缩小窗口,左指针右移if char in t_count and window_count[char] < t_count[char]:formed_chars -= 1  # 一个字符的频率不满足要求,更新已匹配字符数量left += 1  # 左指针右移right += 1  # 右指针右移return min_window  # 返回最小覆盖子串

使用了滑动窗口的思想来解决最小覆盖子串问题。

题目二:最长连续子序列
给定一个字符串s,找出s中最长的连续子序列,使得子序列中的每个字符的前后相邻字符在原始字符串中也是相邻的。
输入: "abacdefg"
输出: "abcdefg"

def longest_continuous_subsequence(s):if not s:return ""max_length = 1  # 最长连续子序列的长度start = 0  # 连续子序列的起始索引end = 0  # 连续子序列的结束索引longest_subsequence = s[0]  # 最长连续子序列for i in range(1, len(s)):if ord(s[i]) == ord(s[i - 1]) + 1:end = i  # 连续序列继续else:start = i  # 连续序列中断,更新起始索引if end - start + 1 > max_length:max_length = end - start + 1  # 更新最长长度longest_subsequence = s[start:end + 1]  # 更新最长连续子序列return longest_subsequence  # 返回最长连续子序列

通过遍历字符串来找到最长连续子序列。每次遇到断开的情况,更新起始索引,并根据最长长度更新最长连续子序列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/51664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu vi 左下角没有提示

1 打开终端&#xff0c;输入以下命令 sudo gedit /etc/vim/vimrc.tiny 2 进入文件后&#xff0c;修改 set compatible 为set nocompatible&#xff0c;如下所示&#xff1a; " Vim configuration file, in effect when invoked as "vi". The aim of this "…

全球公链进展| Shibarium已上线;opBNB测试网PreContract硬分叉;Sui 主网 V1.7.1 版本

01 ETH 以太坊最新一次核心开发者执行会议&#xff1a;讨论 Devnet 8 更新、ElP-4788、Holesky 测试网等 以太坊核心开发者 Tim Beiko 总结最新一次以太坊核心开发者执行会议&#xff08;ACDE&#xff09;&#xff0c;讨论内容包括 Devnet 8 更新、ElP-4788、Holesky 测试网、…

【DevOps视频笔记】4.Build 阶段 - Maven安装配置

一、Build 阶段工具 二、Operate阶段工具 三、服务器中安装 四、修改网卡信息 五、安装 jdk 和 maven Stage1 : 安装 JDK Stage 2 : 安装 Maven 2-1 : 更换文件夹名称 2-2 : 替换配置文件 settings.xml- 2-3 : 修改settings.xml详情 A. 修改maven仓库地址 - 阿里云 B…

CentOS系统环境搭建(十七)——elasticsearch设置密码

centos系统环境搭建专栏&#x1f517;点击跳转 elasticsearch设置密码 没有密码是很不安全的一件事&#x1f62d; 文章目录 elasticsearch设置密码1.设置密码2.登录elasticsearch3.登录kibana4.登录elasticsearch-head 1.设置密码 关于Elasticsearch的安装请看CentOS系统环境搭…

适配小程序隐私保护指引设置

由于小程序发布了一个公告&#xff0c;那么接下来就是怎么改简单的问题了。毕竟不太想大的改动历史上的代码。尽量简单的适配隐私策略就可以了。 整体思路也是参考现在App普遍的启动就让用户同意隐私策略&#xff0c;不同意不让用&#xff0c;同意了之后才能够继续使用。 公告…

ubuntu下mysql

安装&#xff1a; sudo apt update sudo apt install my_sql 安装客户端&#xff1a; sudo apt-get install mysql-client sudo apt-get install libmysqlclient-dev 启动服务 启动方式之一&#xff1a; sudo service mysql start 检查服务器状态方式之一&#xff1a;sudo …

计算机网络 QA

DNS 的解析过程 浏览器缓存。当用户通过浏览器访问某域名时&#xff0c;浏览器首先会在自己的缓存中查找是否有该域名对应的 IP 地址&#xff08;曾经访问过该域名并且没有清空缓存&#xff09;系统缓存。当浏览器缓存中无域名对应的 IP 地址时&#xff0c;会自动检测用户计算机…

在WPF Visual Tree中查找父控件

实现 private static T FindVisualParent<T>(DependencyObject child)where T : DependencyObject{DependencyObject parentObject VisualTreeHelper.GetParent(child);if (parentObject null){return null;}T parent parentObject as T;if (parent ! null){return pa…

软件测试技术之可用性测试之WhatsApp Web

Tag&#xff1a;可行性测试、测试流程、结果分析、案例分析 WhatsApp是一款面向智能手机的网络通讯服务&#xff0c;它可以通过网络传送短信、图片、音频和视频。WhatsApp在全球范围内被广泛使用&#xff0c;是最受欢迎的即时聊天软件。 虽然&#xff0c;在电脑上使用WhatsAp…

docker搭建owncloud,Harbor,构建镜像

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 拉取镜像 docker pull owncloud docker pull mysql:5.6 2、安装搭建私有仓库 Harbor 1.下载docker-compose 2.安装harbor 3.编辑 harbor.yml文件 使用./intall.sh安装 4.登录 3、编写Dockerfile制作Web应用系…

【学习FreeRTOS】第13章——FreeRTOS队列

1.队列简介 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制&#xff08;消息传递&#xff09; FreeRTOS基于队列&#xff0c; 实现了多种功能&#xff0c;其中包括队列集、互斥信号量、计数型信号量、二值信号量、 递归互斥信号量&#xff0c;因此很有必要深入了…

奇葩的this与$emit传值

需求&#xff1a;最近遇到了一个需求&#xff0c;把一个页面内部的tab选项卡改为路由控制的页面 问题&#xff1a;查询条件单独封装一个组件后给父组件页面通过$emit事件传递表单参数&#xff1b;但是在父组件中每次得到的表单值都是undefined&#xff1b;调试了半天&#xff0…

Linux CentOS7系统,抓取http协议的数据包

使用 tcpdump 命令 1.首先确认是否安装 [rootlocalhost ~]# which tcpdump /usr/bin/which: no tcpdump in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) [rootlocalhost ~]#我这里没有安装 1.1 安装 tcpdump yum install tcpdump 安装成功如下&#xf…

设计模式 07 桥接模式

桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型模式 概述 桥接模式是将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。它是一种对象结构型模式&#xff0c;又称为柄体&#xff08;Handle and Body&#xff09;模式或接口&#xff08;Interface&…

一生一芯6——ubuntu rpm软件安装

ubuntu不支持rpm&#xff0c;需要将rpm软件安装包转成deb进行安装 安装alien sudo apt-get install alien格式转换 sudo alien xxx.rpm 在目录下会生成deb的安装包 软件安装 sudo dpkg -i xxx_amd64.deb 安装完成

【C++ 学习 ⑯】- 继承(上)

目录 一、继承的概念和定义 1.1 - 概念 1.2 - 定义 二、继承时的对象内存模型 三、向上转型和向下转型 四、继承时的名字遮蔽问题 4.1 - 有成员变量遮蔽时的内存分布 4.2 - 重名的基类成员函数和派生类成员函数不构成重载 一、继承的概念和定义 1.1 - 概念 C 中的继承…

(五)、Redisson锁机制源码分析

1、了解分布式锁的特性 1、锁的互斥性 也就是说,在任意时刻,只能有一个客户端能获取到锁,不能同时有两个或多个客户端获取到锁。简单来说,就比如上厕所,一个厕所只有一个坑位,只能一个人上,不能同时两个人或多个人上。2、锁的同一性 也就是说,锁只能被持有该锁的客户端…

MMEdu实现摄像头图像分类(Python版)

先安装MMEdu库&#xff01; MMEdu安装&#xff1a;https://blog.csdn.net/zyl_coder/article/details/132483865 下面的代码请在Jupyter上运行&#xff0c;并自己准备数据集。若模型还未训练&#xff0c;请先在本地训练完模型后再进行模型推理。 import cv2 capture cv2.Vi…

【AWS】创建IAM用户;无法登录IAM用户怎么办?错误提示:您的身份验证信息错误,请重试(已解决)

目录 0.背景问题分析 1.解决步骤 0.背景问题分析 windows 11 &#xff0c;64位 我的问题情景&#xff1a; 首先我创建了aws的账户&#xff0c;并且可以用ROOT用户登录&#xff0c;但是在登录时选择IAM用户&#xff0c;输入ROOT的名字和密码&#xff0c;就会提示【您的身份验证…

【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构

MinIO背景介绍 MinIO创始者是Anand Babu Periasamy, Harshavardhana&#xff08;戒日王&#xff09;等人&#xff0c; Anand是GlusterFS的初始开发者、Gluster公司的创始人与CTO&#xff0c;Harshavardhana曾经是GlusterFS的开发人员&#xff0c;直到2011年红帽收购了Gluster公…