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是否是大写英文字母