[LeetCode]520. Detect Capital(检测单词是否合法)

520. Detect Capital

Given a word, you need to judge whether the usage of capitals in it is right or not.
We define the usage of capitals in a word to be right when one of the following cases holds:
- All letters in this word are capitals, like “USA”.
- All letters in this word are not capitals, like “leetcode”.
- Only the first letter in this word is capital if it has more than one letter, like “Google”.
Otherwise, we define that this word doesn’t use capitals in a right way.
题目大意:判断单词是否合法,合法有三种,要么全部大写,要么全部小写,要么第一个大写剩下的都是小写,否则不合法

  • Example 1:

    Input: "USA"
    Output: True
    
  • Example 2:

    Input: "FlaG"       
    Output: False
    

    Note: The input will be a non-empty word consisting of uppercase and lowercase latin letters.
    注意:输入将是由大写和小写拉丁字母组成的非空字符。

C++

class Solution {
public:
    bool detectCapitalUse(string word) {
        int length = word.length();
        if (length == 1)
            return true;
        if (word[0]> 'Z')//首字母小写 后面有大写就不符合规则
        {
            for (int i=1;i<length;i++)//遍历除首字母外剩下字母
            {
              if (word[i]<='Z')//遇到大写就返回false
              {
                return false;
              }
            }
        }
        else
        {
            if(word[1]<='Z')//首字母大写 第二个字母也大写
            {
                for (int i=2;i<length;i++)//从第三个字母遍历
                {
                  if (word[i]>'Z')//遇到小写就返回false
                  {
                    return false;
                  }
                }
            }
            else //首字母大写 第二个字母小写
            {
                for (int i=2;i<length;i++)//从第三个字母遍历
                {
                  if (word[i]<='Z')//遇到大写就返回false
                  {
                    return false;
                  }
                }
            }
        }
        return true;
    }
};

注意:

  • 按照规定写算法不容易,不如换个思路。判断哪种情况不符合规定
  • 总共三种情况:
  • 1.首字母小写,后面只要有大写字母就是错误的;
  • 2.首字母大写,第二个字母大写,后面只要有小写字母就是错误的;
  • 3.首字母大写,第二个字母小写,后面只要有大写字母就是错误的;

    第一种和第三种情况可以合并考虑,以下示例

C++

class Solution {
public:
    bool detectCapitalUse(string word) {
        if (word.length() <= 1) return true;
        if (islower(word[0])||(isupper(word[0])&&islower(word[1]))) 
        //首字母小写 或者  (首字母大写和第二个字母小写)
        {
            for (int i = 1; i < word.length(); i++)
            //后面只要有大写字母就是错误的
            {
                if (isupper(word[i]))
                    return false;
             }
        } 
        else //首字母大写和第二个字母大写
        {
            for (int i = 1; i < word.length(); i++)
            //后面只要有小写字母就是错误的
            {
                if (islower(word[i])) 
                    return false;
            }           
        }
        return true;
    }
};

注意:

  • islower(C) 函数判断字符C是否是小写英文字母
  • isupper(C) 函数判断字符C是否是大写英文字母
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值