算法设计大赛T1 - T4

前面几道题目比较简单,故这里将部分题目写在一个blog下

T1:实现 strStr() 函数。 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。

解题思路:
嗯…这题有啥解题思路啊…直接调用python中index方法,可返回字符或字符串在另一字符串中第一次出现的位置,使用if 判断needle是否在haystack中,若不在就返回-1(其实用try也没啥问题)

# 使用if判断
class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        if needle in haystack:
            return haystack.index(needle)
        else:
            return -1
#使用try判断,防止报错
class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        try:
            return haystack.index(needle)
        except:
            return -1

运行结果
在这里插入图片描述

T2 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

思路:
用split方法将字符分割为纯字符串以及空,找到最后一个非空的字符串,返回其长度

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        s = s.split(' ')
        i = len(s)-1
        while s[i] == "":
            i -= 1
        return len(s[i])

运行结果
在这里插入图片描述

T3 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。

思路:若为简单的求回文数的问题,python中只需要求s[::-1] 是否等于s即可,但本题中我们要求的是带有特殊字符的s,且特殊字符不在统计范围内,故需要将特殊字符从s中移除,或可将s中非特殊字符转移到其他变量中。

class Solution:
    def isPalindrome(self, s: str) -> bool:
    #法一,将s中的字符转移到新变量ls中
        ls = []
        s = s.lower()
        test = "abcdefghijklmnopqrstuvwxyz0123456789"
        for i in range(len(s)):
            if s[i] in test:
                ls.append(s[i])
        return ls==ls[::-1]
class Solution:
    def isPalindrome(self, s: str) -> bool:
    #法二,将测试集中带有的特殊字符从s中删去
        s = s.lower()
        ls = ' <>?:"@#$%^&*()_+/\'\*-+.[]{},!;|`'
        for i in ls:
            s = s.replace(i,'')
        return s==s[::-1]

运行结果:
在这里插入图片描述

T4 给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。
如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵

思路:
遍历矩阵,所有元素左上等于右下即可

class Solution:
    def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool:
        for i in range(len(matrix)-1):
            for j in range(len(matrix[0])-1):
                if matrix[i][j] != matrix[i+1][j+1]:
                    return False
        return True

结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值