1.函数
class Solution:
def detectCapitalUse(self, word: str) -> bool:
# 函数
return True if word == word.upper() or word == word.capitalize() or word == word.lower() else False
# capitalize() 首字母大写
# title() 标题式 多个单词,单词首字母大写
# swapcase() 大小写转换
还有看到另外的函数写法,来自题解(. - 力扣(LeetCode))。代码如下:
class Solution:
def detectCapitalUse(self, word: str) -> bool:
# 函数2
return word.islower() or word.isupper() or word.istitle()
2.模拟
方法参考官方题解(. - 力扣(LeetCode))。当字符串长为一时,无论大小写,均满足条件。如果第一个字母大写,则后面的大小写统一,即和第二个字符大小写一样;如果第一个字母小写,则后面均需小写。代码如下:
class Solution:
def detectCapitalUse(self, word: str) -> bool:
# 模拟
# islower(),isupper()函数
if len(word) == 1:
return True
if word[0].islower():
return all(word[i].islower() for i in range(1,len(word)))
else:
return all(word[i].islower() == word[1].islower() for i in range(1,len(word)))
不会去掉其他字符,以下方法均来自官方题解(. - 力扣(LeetCode))。
1.筛选+判断
class Solution:
def isPalindrome(self, s: str) -> bool:
# 筛选+判断
ss = ''.join(c.lower() for c in s if c.isalnum())
return ss == ss[::-1]
来自chatgpt:
isalnum()
用于检查字符串是否只包含字母和数字字符。
其他类似函数:
isalpha()
:检查字符串是否只包含字母字符。isdigit()
:检查字符串是否只包含数字字符。isspace()
:检查字符串是否只包含空白字符(空格、制表符、换行符等)。
2.筛选+双指针
class Solution:
def isPalindrome(self, s: str) -> bool:
# 筛选+双指针
ss = ''.join(c.lower() for c in s if c.isalnum())
left,right = 0,len(ss)-1
while left < right:
if ss[left] != ss[right]:
return False
left += 1
right -= 1
return True
3.不筛选+双指针
class Solution:
def isPalindrome(self, s: str) -> bool:
# 不筛选+双指针
# 时复O(n)
n = len(s)
left,right = 0,n-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
1.遍历,不断更新ans。(也就是横向扫描)。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
# 遍历
ans = strs[0]
for i in range(1,len(strs)):
s = strs[i]
j = 0
while j < min(len(ans),len(s)):
if ans[j] != s[j]:
break
j += 1
ans = ans[:j]
return ans
参考官方题解(. - 力扣(LeetCode)),对上述代码进行优化:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
# 遍历-横向扫描
ans = strs[0]
for i in range(1,len(strs)):
s = strs[i]
j = 0
while j < min(len(ans),len(s)) and ans[j] == s[j]:
j += 1
ans = ans[:j]
if ans == '': #优化
break
return ans
2.纵向扫描,代码来自官方题解。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
# 纵向扫描
if not strs:
return ""
length, count = len(strs[0]), len(strs)
for i in range(length): #遍历字符
c = strs[0][i]
if any( i == len(strs[j]) or strs[j][i] != c for j in range(1,count) ):
return strs[0][:i]
return strs[0]
1.拆分+列表
class Solution:
def countSegments(self, s: str) -> int:
# 拆分+列表
return len(s.split())
2.遍历,方法来自题解(. - 力扣(LeetCode))。
class Solution:
def countSegments(self, s: str) -> int:
# 遍历
ans = 0
for i,c in enumerate(s):
if c != ' ' and (i == 0 or s[i-1] == ' '):
ans += 1
return ans
3.巧妙遍历(升级版),方法来自题解(. - 力扣(LeetCode))。
class Solution:
def countSegments(self, s: str) -> int:
# 巧妙遍历
ans = 0
s += ' '
for i in range(1,len(s)):
if s[i] == ' ' and s[i-1] != ' ':
ans += 1
return ans
完
感谢你看到这里!一起加油吧!