leecode 49. Sort Letters by Case
Description
给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序。
小写字母或者大写字母他们之间不一定要保持在原始字符串中的相对位置。
样例 1:
输入: "abAcD"
输出: "acbAD"
样例 2:
输入: "ABC"
输出: "ABC"
思路:该题需要让我们将小写字母放在前面,大写字母放在后面。故可以用两个类似指针的索引来标记,将索引称作left,right 从左侧开始遍历
- left处字母是大写,right处字母是小写,则交换二者(a,b=b,a即可完成交换),left+=1,right-=1
- left处字母是小写,right处字母是大写,则正常,left+=1,right-=1
- left处是小写,right处是小写,则固定right,left右移。left+=1
- left处是大写,right处是大写,则故定left,right左移。right-=1
python代码如下:
class Solution:
"""
@param: chars: The letter array you should sort by Case
@return: nothing
"""
def sortLetters(self, chars):
# write your code here
if len(chars)==0:
return
left=0
right=len(chars)-1
while left<right:
if chars[left].isupper() and chars[right].islower():
chars[left],chars[right]=chars[right],chars[left]
left+=1
right-=1
elif chars[left].isupper() and chars[right].isupper():
right-=1
elif chars[left].islower() and chars[right].isupper():
right-=1
left+=1
else:
left+=1
但是在此处我们考虑直接用排序函数来排序如何,将排序的依据设置为小写优先,实际上在此处取得了更好的效率值。非常简洁!展现了python之美!!
class Solution:
"""
@param chars: The letters array you should sort.
"""
def sortLetters(self, chars):
chars.sort(key=lambda c: c.isupper())
#采用sort排序,key设置为小写优先 此处运用了lambda函数