自我监督刷题记录处5

这是作者的第五次LeetCode刷题记录,分别挑战了Valid Sudoku、Valid Palindrome和First Unique Character in a String题目。对于Valid Sudoku,采用暴力解法但意识到存在更优解;Valid Palindrome的简单实现,考虑使用ASCII区间或正则表达式优化;First Unique Character in a String用切片解决,可能非最佳策略,双指针也是可行方案。
摘要由CSDN通过智能技术生成

第5天。🤐 周日下午为什么比周五下午感觉还要累。 心累💔

Leetcode 36 Valid Sudoku

(Medium Level)

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        return self.is_row_valid(board) and self.is_clo_valid(board) and self.is_square_valid(board)
    
    def is_valid(self,unit):
        unit = [i for i in unit if i != '.']
        return len(set(unit)) == len(unit)

    def is_row_valid(self,board):
        for row in board:
            if not self.is_valid(row):
                return False
        return True

    def is_clo_valid(self,board):
        for col in zip(*board):
            if not self.is_valid(col):
                return False
        return True

    def is_square_valid(self,board):
        for i in (0,3,6):
            for j in (0,3,6):
                square = [board[x][y] for x in range(i,i+3) for y in range(j,j+3)]
                if not self.is_valid(square):
                    return False
        return True

按顺序暴力解的,也没想到有什么更好的办法。看到有国外大神只用了5行写完收工…距离产生的不止是美,还有实实在在的距离🤯🤯🤯🤯

Leetcode 125. Valid Palindrome

(Easy Level)

class Solution:
    def isPalindrome(self, s: str) -> bool:
    	left, right = 0, len(s)-1
    	while left < right:
    		while left < right and not s[left].isalnum():
    			left +=1
    		while left < right and not s[right].isalnum():
    			right +=1
    		if s[left].lower() != s[right].lower():
    			return False
    		left +=1
    		right -=1
    	return True

这个是最简单想到的写法,不是好的解法。只是记录自己第一遍写的代码,这样第二遍可以对比一。我觉得用ASCII比较锁定区间可能是他想要的方法。也可以用正则来做,但需要引外库可能过不了leetcode,吧。

Leetcode 387. First Unique Character in a String

(Easy Level)

class Solution:
    def firstUniqChar(self, s: str) -> int:
        for i,x in enumerate(s):
			
			#检查当前字母之前和之后有无相同字母
            if x not in s[i+1:] and x not in s[:i]:
                return i
        return -1   
        

开始想的是用collection中的counter方法来做,但乐儿他从的不让import,最终选择了切片,貌似不是最好的方法,是最大众的方法。双指针也可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值