算法练习--字符串相关

文章目录

  • 计算字符串最后一个单词的长度
  • 计算某字符出现次数
  • 明明的随机数
  • 回文字符串
  • 回文数字
  • 无重复字符的最大子串长度
  • 有效的括号
  • 罗马数字转整数
  • 字符串通配符
  • 杨辉三角
  • 查找两个字符串a,b中的最长公共子串 **
  • 找出字符串中第一个只出现一次的字符

计算字符串最后一个单词的长度

pending
 

计算某字符出现次数

写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出字符串中该字符的出现次数。(不区分大小写字母)

输入描述:
第一行输入一个由字母、数字和空格组成的字符串,
第二行输入一个字符(非空格)

输出描述:
输出字符串中含有该字符的个数。(不区分大小写字母)

示例1
输入:
ABCabc
A
输出:
2
python实现

def statistic_char_num():s1 = input()s2 = input().strip().lower()num = 0for i in s1.lower():if i == s2:num += 1print(num)statistic_char_num()

 

明明的随机数

生成N个 1到500之间 的随机整数。
删去其中重复的数字,即相同的数字只保留一个,然后把这些数从小到大排序,按照排好的顺序输出。

1≤N≤1000
1≤val≤500

输入描述:
第一行先输入随机整数的个数 N ;接下来的 N 行每行输入一个整数;
代表明明生成的随机数。
输出描述:
输出多行,表示处理后的结果

示例1
输入:
3
2
2
1

输出:
1
2

说明:
输入解释:
第一个数字是3,也即这个小样例的N=3,说明用计算机生成了3个1到500之间的随机整数,接下来每行一个随机数字,共3行,也即这3个随机数字为:
2
2
1
所以样例的输出为:
1
2

pending…

回文字符串

  1. 判断一个字符串是否为回文字符串。
  2. 找出一个字符串中的最大回文子串。

最大回文子串

 

回文数字

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。

示例 1:
输入:x = 121
输出:true
 
示例 2:
输入:x = -121
输出:false

示例 3:
输入:x = 10
输出:false
进阶:你能不将整数转为字符串来解决这个问题吗?

python实现:
思路:将整数反转过来,与原值比较,相等则为True,否则False

class Solution:def isPalindrome(self, x: int) -> bool:# 负数不是if x < 0:return False# 单个数字 是回文elif x <= 9:return Trueelse: # >= 10   O(n)origin = xreverse = 0base = 10while x // base: base *= 10base /= 10while x:reverse += x % 10 * basex //= 10base /= 10 return reverse == origin

 

无重复字符的最大子串长度

pending

 

有效的括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 每个右括号都有一个对应的相同类型的左括号。

示例 1:
输入:s = “()”
输出:true

示例 2:
输入:s = “()[]{}”
输出:true
 
示例 3:
输入:s = “(]”
输出:false

提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
 
python 实现:
hash + 栈空间

# hash存储对应关系
# 遍历字符串,左括号入栈
# 右括号出栈,并对比
class Solution:def isValid(self, s: str) -> bool:n = len(s)if n % 2 != 0:  # 有效则必然成对出现return Falsedict_ = {  # 存储对应关系"(": ")","[": "]","{": "}","0": "0"}stack = ["0"] # 防止第一个就是右括号,出栈报错for c in s:if c in dict_: # 左括号入栈stack.append(c)elif dict_[stack.pop()] != c: # 右括号出栈return Falsereturn len(stack) == 1             

 

罗马数字转整数

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

例如, 罗马数字 2 写做 II ,12 写做 XII ,27 写做 XXVII 。

罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。

示例 1:
输入: s = “III”
输出: 3
 
示例 2:
输入: s = “IV”
输出: 4

示例 3:
输入: s = “IX”
输出: 9

示例 4:
输入: s = “LVIII”
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5:
输入: s = “MCMXCIV”
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

python实现

  • 当前符号大于等于右边的符号,则表示为正;
  • 当前符号小于右边的符号,则表示为负。
class Solution:def romanToInt(self, s: str) -> int:dict_ = {"I": 1,"V": 5,"X": 10,"L": 50,"C": 100,"D": 500,"M": 1000}result = 0n = len(s)for i in range(n-1):c = s[i]if dict_.get(c) >= dict_.get(s[i+1]):# positiveresult += dict_.get(c)else:# negativeresult -= dict_.get(c)result += dict_.get(s[-1])return result

 

字符串通配符

通配符是一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。
实现如下2个通配符:
*:匹配0个或以上的字符(注:能被 *和 ?匹配的字符仅由字母和数字0到9组成)
?:匹配1个字符

注意:匹配时不区分大小写。

输入:

  • 通配符表达式;
  • 一组字符串。

输出:

  • 匹配成功输出true
  • 匹配失败输出false

进阶:时间复杂度: O ( n 2 ) {O(n^2)} O(n2),空间复杂度: O ( n ) {O(n)} O(n)

 
示例1
输入:

  • 第一行 te?t*.*
  • 第二行 txt12.xls

输出:

  • false

 
示例2
输入:

  • 第一行 z
  • 第二行 zz

输出:

  • false

 
示例3
输入:

  • pq
  • pppq

输出:

  • false

示例4
输入:

  • **z
  • 0QZz

输出:

  • true

示例5
输入:

  • ?*Bc*?
  • abcd

输出:

  • true

示例6
输入:

  • h*?*a
  • h#a

输出:

  • false

示例7
输入:

  • p*p*qp**pq*p**p***ppq
  • pppppppqppqqppqppppqqqppqppqpqqqppqpqpppqpppqpqqqpqqp

输出:

  • false

python实现

  • s1, s2均为空;
  • s1, s2有一个空;
  • s1, s2均非空;从最后一个元素,递归解决。
  • s1最后一位是字母、数字时;
  • s1最后一位是?时;
  • s1最后一位是*时;
# 匹配函数
def fun(s1, s2):if s1 == "" and s2 == "":return Trueelif s1 == "" and s2 != "":return Falseelif s1 != "" and s2 == "":if s1.replace("*", "") == "":return Trueelse:return Falseelse:m, n = len(s1), len(s2)if s1[m - 1] == s2[n - 1] or (s1[m - 1] == "?" and s2.isalnum()):return fun(s1[: m - 1], s2[: n - 1])elif s1[m - 1] == "*":return fun(s1[: m - 1], s2) or fun(s1, s2[: n - 1])else:return Falses1, s2 = input().lower(), input().lower()
if fun(s1, s2):print("true")
else:print("false")

有点问题。
 

杨辉三角

在这里插入图片描述
第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。

求第n行第一个偶数出现的位置。如果没有偶数,则输出-1
输入第n行,
输出第n行第一个偶数的位置。
示例1
输入:
4
输出:
3 即第四行的6
python代码

import sys
alt=[2,3,2,4] # 发现规律,从第三行开始偶数位置为2324循环
for line in sys.stdin:n=int(line.strip())if n<3:print(-1)if n>=3: print(alt[(n-3)%4]) #所以对4求余,映射到上面alt列表中

 

查找两个字符串a,b中的最长公共子串 **

进阶:时间复杂度: O ( n 3 ) {O(n^3)} O(n3)
空间复杂度: O ( n ) {O(n)} O(n)
输入:
输入两个字符串

输出:
返回重复出现的字符

示例1
输入:
abcdefghijklmnop
abcsafjklmnopqrstuvw

输出:
jklmnop

python实现
遍历短的子串,判断是否in长的字符串中。

def max_common_substring(a, b):if not a or not b:print("")return ""if len(a) > len(b):a, b = b, ares = ''# 遍历短的字符串for i in range(0, len(a)):for j in range(i, len(a)):if a[i:j + 1] in b:if j + 1 - i > len(res):res = a[i:j + 1]print(a[i:j + 1], "在")else:print(a[i:j + 1], "不在")breakprint(res)

 

找出字符串中第一个只出现一次的字符

找出字符串中第一个只出现一次的字符

输入描述:
输入一个非空字符串

输出描述:
输出第一个只出现一次的字符,如果不存在输出-1

示例1
输入:
asdfasdfo

输出:
o
python实现:

  • hash统计出现次数;
  • 列表记录出现一次的字符
def count_char(s):dict_ = {}temp = []for c in s:if c in dict_:if c in temp:temp.remove(c)else:dict_[c] = 1temp.append(c)if temp:print(temp[0])return temp[0]print(-1)return -1s = input()
count_char(s)

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

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

相关文章

arcgis--网络分析(理论篇)

1、定义概念 &#xff08;1&#xff09;网络&#xff1a;由一系列相互联通的点和线组成&#xff0c;用来描述地理要素&#xff08;资源&#xff09;的流动情况。 &#xff08;2&#xff09;网络分析&#xff1a;对地理网络&#xff08;如交通网络、水系网络&#xff09;&…

【excel技巧】excel公式如何隐藏?

Excel文件中最重要的除了数据还有就是一些公式了&#xff0c;但是只要点击单元格&#xff0c;公式就能显示出来&#xff0c;如果不想别人看到公式应该如何设置呢&#xff1f;今天分享隐藏excel单元格数据的方法。 选中单元格&#xff0c;点击右键打开【设置单元格格式】&#x…

Python-OpenCV中的图像处理-边缘检测

Python-OpenCV中的图像处理-边缘检测 边缘检测Canny算子 边缘检测Canny算子 Canny 边缘检测是一种非常流行的边缘检测算法&#xff0c;是 John F.Canny 在 1986 年提出的。它是一个有很多步构成的算法&#xff1a;噪声去除、计算图像梯度、非极大值抑制、滞后阀值等。 Canny(i…

last_hidden_state vs pooler_output的区别

一、问题来源&#xff1a; from transformers import AutoTokenizer, AutoModel import torch # Load model from HuggingFace Hub MODEL_NAME_PATH xxxx/model/bge-large-zh tokenizer AutoTokenizer.from_pretrained(MODEL_NAME_PATH) model AutoModel.from_pretrained(M…

DROP USER c##xyt CASCADE > ORA-01940: 无法删除当前连接的用户

多创建了一个用户&#xff0c;想要给它删除掉 一 上执行过程&#xff0c;确实删除成功了 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing optionsSQL> DR…

在Go语言单元测试中如何解决Redis存储依赖问题

登录程序示例 在 Web 开发中&#xff0c;登录需求是一个较为常见的功能。假设我们有一个 Login 函数&#xff0c;可以实现用户登录功能。它接收用户手机号 短信验证码&#xff0c;然后根据手机号从 Redis 中获取保存的验证码&#xff08;验证码通常是在发送验证码这一操作时保…

[C#] 简单的俄罗斯方块实现

一个控制台俄罗斯方块游戏的简单实现. 已在 github.com/SlimeNull/Tetris 开源. 思路 很简单, 一个二维数组存储当前游戏的方块地图, 用 bool 即可, true 表示当前块被填充, false 表示没有. 然后, 抽一个 “形状” 类, 形状表示当前玩家正在操作的一个形状, 例如方块, 直线…

Pycharm如何打断点进行调试?

断点调试&#xff0c;是编写程序中一个很重要的步骤&#xff0c;有些简单的程序使用print语句就可看出问题&#xff0c;而比较复杂的程序&#xff0c;函数和变量较多的情况下&#xff0c;这时候就需要打断点了&#xff0c;更容易定位问题。 一、添加断点 在代码的行标前面&…

吐血整理,Jenkins配置邮件发送测试报告持续集成,看这一篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 开启SMTP服务 这…

Linux下进程的特点与环境变量

目录 进程的特点 进程特点的介绍 进程时如何实现并发性的 进程间如何切换 概念铺设 PC指针 上下文 环境变量 PATH 修改PATH HOME SHELL env 命令行参数 什么是命令行参数&#xff1f; 打印命令行参数 通过函数获得环境变量 getenv 命令行参数 env 修改环境变…

C 语言的逻辑运算符

C 语言的逻辑运算符包括三种&#xff1a; 逻辑运算符可以将两个关系表达式连接起来. Suppose exp1 and exp2 are two simple relational expressions, such as cat > rat and debt 1000 . Then you can state the following: ■ exp1 && exp2 is true only if bo…

百度chatgpt内测版

搜索AI伙伴 申请到了百度的chatgpt&#xff1a; 完整的窗口布局&#xff1a; 三个哲学问题&#xff1a; 灵感中心&#xff1a; 请做一副画&#xff0c;一个渔夫&#xff0c;冬天&#xff0c;下着大雪&#xff0c;在船上为了一家的生计在钓鱼&#xff0c;远处的山上也都是白雪&a…