LeetCode520. 检测大写字母

给定一个单词,你需要判断单词的大写使用是否正确。

我们定义,在以下情况时,单词的大写用法是正确的:

全部字母都是大写,比如"USA"。
单词中所有字母都不是大写,比如"leetcode"。
如果单词不只含有一个字母,只有首字母大写, 比如 “Google”。
否则,我们定义这个单词没有正确使用大写字母。

示例 1:

输入: “USA”
输出: True
示例 2:

输入: “FlaG”
输出: False

解法1:思路:
就根据题意,给定的单词有三种情况,分别判断就好了。用islower()和isupper()方法分别判断
需要注意的是使用字符串切片的时候返回值要转换成str,才能进一步使用判断方法。

class Solution(object):
    def detectCapitalUse(self, word):
        """
        :type word: str
        :rtype: bool
        """
        if word.isupper():
            return True
        elif word.islower():
            return True
        else:
            a = str(word[0])
            b = str(word[1:])
            # 如果单词第一个字母是大写,后边的都是小写,返回True,其余情况都返回False
            if a.isupper and b.islower():
                return True
            return False

解法2:正则表达式

  1. re.findall(pattern,string,flags=0) 返回找到的所有内容(全文搜索)
    返回值:list
    例如:print(re.findall(‘s’,‘afadsfdsf’)) 返回值[‘s’,‘s’]
    该方法不需要通过group方法进行验证,找不到时返回一个空列表。
  2. re.match(pattern,string,flags=0) 从开头开始查找
    返回值:(找到) or None(没找到)
    通过group()方法得到匹配到的值
  3. re.search(pattern,string,flags=0) 全文搜索,只获取第一个
    返回值:(找到) or None(没找到)
    例如:s = re.search(‘ba’,‘adbadfsbadsf’)
    print(s.group()) ----> ‘ba’
    通过group()方法得到匹配到的值
class Solution(object):
    def detectCapitalUse(self, word):
        """
        :type word: str
        :rtype: bool
        """
        m1 = re.findall('^[a-z]*',word)[0] # 验证是否全部小写,m1为匹配到的小写字符串
        m2 = re.findall('^[A-Z]*', word)[0] # 验证大写,m2为匹配到的大写字符串
        m3 = re.match('^[A-Z]{1}[a-z]*', word) # 验证首字母大写,其他小写
        # 如果匹配成功,返回一个匹配对象,利用group()方法读取匹配到的内容,否则返回None
        if m3:
            m3 = m3.group()
        return word == m1 or word == m2 or word == m3

你可能感兴趣的:(leetcode整理,字符串,正则表达式)