0️⃣python数据结构与算法学习路线
学习内容:
- 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
- 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…
题目:
给定一个单词,你需要判断单词的大写使用是否正确。
我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如"USA"。
单词中所有字母都不是大写,比如"leetcode"。
如果单词不只含有一个字母,只有首字母大写, 比如 “Google”。
否则,我们定义这个单词没有正确使用大写字母。
输入输出:
输入: “USA”
输出: True
解题思路:
首先判断首字母是不是大写
首字母大写:其他字母全为小写或全为大写,返回Ture
首字母小写:其他字母全为小写,返回Ture
其余返回False
算法实现:
自己的思路:
class Solution(object):
def detectCapitalUse(self, word):
if len(word)<2:
return True
elif 96 < ord(word[0]): # 首字母小写
for i in word[1:]:
if ord(i) < 97:# 其他字母大写
return False
elif ord(word[0])< 97:# 首字母大写
if 96 < ord(word[1]):# 第二个字母小写
for i in word[2:]:
if ord(i) < 97:# 其他字母大写
return False
else:# 第二个字母大写
for i in word[2:]:
if 96 < ord(i):# 其他字母小写
return False
return True
题解中其他人做法:
class Solution:
def detectCapitalUse(self, word: str) -> bool:
return word.islower() or word.isupper() or word.istitle()
出现问题:
- 读取字符串中的每个字符(和列表方法一样)
# 字符串转换成列表
words = []
for word in str:
words +=word
print('words = ',words)
- 字符和 ASCII 之间相互转换
#ascii转字符串
a_ascii = 97
b = chr(a_ascii)
#字符串转ascii
abc = 'a'
x = ord(abc)
常见ASCII码值:
- 空格的ASCII码值为32
- 数字0到9的ASCII码值分别为48到57
- 大写字母“A”到“Z”的ASCII码值分别为65 到 90
- 小写字母“a”到“z”的ASCII码值分别为97 到 122。
class Solution:
def detectCapitalUse(self, word: str) -> bool:
return word.islower() or word.isupper() or word.istitle()
# 运用字符串的方法str.islower()可以检验字符串是否全为小写,如果小写则返回True
# str.isupper()可以检验字符串是否全为大写,如果大写则返回True
"""
str.istitle()用来判断字符串首字母是否为大写,
如果字符串只有一个单词且首字母为大写,返回结果True,
如果字符串含有多个单词且每个单词首字母为大写,返回结果False
"""
- word[2:]和word[2:-1]输出结果不一样?为什么?
- 只要是有循环的题都要注意字符串的长度