目录
一、题目描述
我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如 "USA" 。
单词中所有字母都不是大写,比如 "leetcode" 。
如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。
给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。
示例 1:
输入:word = "USA"
输出:true
示例 2:
输入:word = "FlaG"
输出:false
二、运行结果
三、解题思路
设置一个变量来记录当前单词已经出现的字符个数(每次出现空格就重新归0),再设置一个变量来记录当前字符是大写字符还是小写字符,归纳一下,对于每个单词来说,不符合要求的情况有两种:
1)该单词中,如果当前字符是大写字符,只要在该字符的前面出现过小写字符,就不满足要求;
2)该单词中,如果当前字符是小写字符,只要前面出现过大写字符并且在该字符前面不止一个字符(可以是大写,也可以是小字),就不满足要求。
如果每个单词都没有出现上述两种情况,就说明该字符串的每个单词都是满足要求的,返回true。
四、代码
class Solution {
public boolean detectCapitalUse(String word) {
int len = word.length();
int wordLen = 0; //当前单词长度
boolean isLow = false; //是否是小写字母的标志
for(int i=0; i<len; ++i){
if(word.charAt(i) == ' ') //空格符
wordLen = 0;
else
{
if(Character.isUpperCase(word.charAt(i))){ //大写字符
if(wordLen>=1 && isLow) //该单词前面出现过小写字符
return false;
isLow = false;
} else { //小写字符
if(wordLen>1 && !isLow) //该单词中,小写字符的前面不止一个大写字符
return false;
isLow = true;
}
wordLen++;
}
}
return true;
}
}