package cn.fansunion.leecode.string; /** * 检测大写字母 * 我们定义,在以下情况时,单词的大写用法是正确的: 全部字母都是大写,比如 "USA" 。 单词中所有字母都不是大写,比如 "leetcode" 。 如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。 给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。 来源:力扣(LeetCode) 链接:力扣 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 * @author wen.lei@brgroup.com * * 2022-2-16 */ public class DetectCapital /* 输入:word = "USA" 输出:true 输入:word = "FlaG" 输出:false*/ /** * 遍历字符串,用1个数组[]维护每个位置是大写还是小写,以及大写的总个数;根据上述2个字段+数组长度即可判定 * @param word * @return */ public boolean detectCapitalUse(String word) //遍历字符串,用1个数组[]维护每个位置是大写还是小写,以及大写的总个数 final int length = word.length(); int [] upperArray = new int [length]; int upperCount= 0 ; for ( int index= 0 ;index<length;index++) char c=word.charAt(index); boolean isUpper=Character.isUpperCase(c); if (isUpper) upperArray[index]= 1 ; upperCount++;
else
upperArray[index]= 0 ;
//"USA" if (upperCount==length) return true ;
//Word if (upperArray[ 0 ]== 1 && upperCount== 1 ) return true ;
//word if (upperCount== 0 ) return true ;
//其它情况,比如“WorD”、“WOrd” return false ;
//官方解法,优先判定 “非法情况”;不符合我的思维习惯,弃坑 public boolean detectCapitalUse2(String word) // 若第 1 个字母为小写,则需额外判断第 2 个字母是否为小写 if (word.length() >= 2 && Character.isLowerCase(word.charAt( 0 )) && Character.isUpperCase(word.charAt( 1 ))) return false ;
// 无论第 1 个字母是否大写,其他字母必须与第 2 个字母的大小写相同 for ( int i = 2 ; i < word.length(); ++i) if (Character.isLowerCase(word.charAt(i)) ^ Character.isLowerCase(word.charAt( 1 ))) return false ;
return true ;
|