先来考虑一下如何判断两个字符串的大小。
而对于两个不相等的字符串,我们可以以下面的规则定义两个字符串的大小:
- 从两个字符串的第
0
个位置开始,依次比较对应位置上的字符编码大小(使用ord获取字符编码)。
- 如果
str1[i]
对应的字符编码等于str2[i]
对应的字符编码,则比较下一位字符。- 如果
str1[i]
对应的字符编码小于str2[i]
对应的字符编码,则说明str1 < str2
。比如:"abc" < "acc"
。- 如果
str1[i]
对应的字符编码大于str2[i]
对应的字符编码,则说明str1 > str2
。比如:"bcd" > "bad"
。- 如果比较到某一个字符串末尾,另一个字符串仍有剩余:
- 如果字符串
str1
的长度小于字符串str2
,即len(str1) < len(str2)
。则str1 < str2
。比如:"abc" < "abcde"
。- 如果字符串
str1
的长度大于字符串str2
,即len(str1) > len(str2)
。则str1 > str2
。比如:"abcde" > "abc"
。- 如果两个字符串每一个位置上的字符对应的字符编码都相等,且长度相同,则说明
str1 == str2
,比如:"abcd" == "abcd"
。按照上面的规则,我们可以定义一个
strcmp
方法,并且规定:
- 当
str1 < str2
时,strcmp
方法返回-1
。- 当
str1 == str2
时,strcmp
方法返回0
。- 当
str1 > str2
时,strcmp
方法返回1
。
strcmp
方法对应的具体代码如下:def strcmp(str1, str2): index1, index2 = 0, 0 while index1 < len(str1) and index2 < len(str2): if ord(str1[index1]) == ord(str2[index2]): index1 += 1 index2 += 1 elif ord(str1[index1]) < ord(str2[index2]): return -1 else: return 1 if len(str1) < len(str2): return -1 elif len(str1) > len(str2): return 1 else: return 0
T125:验证回文串 ——
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
class Solution: def isPalindrome(self, s: str) -> bool: s=s.lower()#忽略字母大小写,干脆全部转成小写,也方便比较 for a in s: ''' 只考虑(小写)字母和数字字符 数字和小写字母的Unicode取值范围分别是[48,57],[97,122] 把不是数字和小写字母的字符都删去 ''' if ord(a)<48 or 57<ord(a)<97 or ord(a)>122: s=s.replace(a,'') b=s[::-1]#切片逆序排列 for i in range(len(s)): if s[i]!=b[i]: return bool(0) return bool(1)
示例1
输入: "A man, a plan, a canal: Panama" 输出: true 解释:"amanaplanacanalpanama" 是回文串示例2
输入: "race a car" 输出: false 解释:"raceacar" 不是回文串
T344:反转字符串——
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/reverse-string
class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ a=[] for i in range(len(s)): a.append(s[len(s)-i-1]) for i in range(len(s)): s[i]=a[i]
T557:反转字符串中的单词3—— 给定一个字符串
s
,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。class Solution: def reverseWords(self, s: str) -> str: a=s.split() b=a[0][::-1] for i in range(1,len(a)): b=b+' '+a[i][::-1] return b
示例1
输入:s = "Let's take LeetCode contest" 输出:"s'teL ekat edoCteeL tsetnoc"示例2
输入: s = "God Ding" 输出:"doG gniD"
T49:字母易位词分组——
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/group-anagrams
这题想了半天不太会,看了官方解答的答案,主要还是昨天有关哈希表(python里的字典)的应用不够熟练class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: a=collections.defaultdict(list) ''' 使用了collections模块之defaultdict 下面是它的解释和用法: Python中通过Key访问字典,当Key不存在时,会引发‘KeyError’异常。 为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值 比如下面的a[key].append(s),如果不提供默认值,字典里面没有key和它对应的value会报错,更别说键值对的缺失了 那么使用了collections模块之defaultdict之后,没有这个key就添加这个key,value默认是一个空的list ''' for s in strs: key=''.join(sorted(s)) a[key].append(s) return list(a.values())