题目:
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.
class Solution {
public:
bool detectCapitalUse(string word) {
}
};
翻译:
检测资本
给定一个词,你需要判断它中的资本的使用是否正确。当以下情况之一存在时,我们将单词中资本的使用定义为正确:
- 这个单词中的所有字母都是大写,如“USA”。
- 这个单词中的所有字母都不是大写,例如“leetcode”。
- 只有此字中的第一个字母是大写,如果它有多个字母,如“Google”。
否则,我们定义这个词不以正确的方式使用大写。
注意:输入将是由大写和小写拉丁字母组成的非空字。
解析:
这就是一个要求不断实现几个要实现的条件的题,重点是要如何去设置条件。
遇到多条件的,我的通常做法是:先把条件列下来,然后看哪些条件可以归类,成为同一组,或者说用一个表达式表示多个条件,这样就可以达到间接的目的。
- 都是大写
- 都是小写
- 如果有多个字母,头字母大写
合并:
首先判断是不是一个字母,则不论大小写都符合,
。。。。。
解答:
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;
}
};