这不是技术贴,只是记录贴!
最近开始在leetcode上练习Java编程,有个题目是检测大写字母,难易程度为易,但还有点意思,记录一下。
要求如下:
1、给定一个单词,判断大写字母的使用是否正确
2、正确的使用情况如下:(1)、USA
(2)、word
(3)、Google
其余格式,视为大写字母使用错误。
我的理解,错误的比如:USa、worD、GooGle等等。后面测试发现 A,a,也就是一个字母时需要认为是对的。这也是需要注意的一个点。
我的思路是这样的:
1、要先判断单词长度,如果长度为1,既一个字母,无论大小写都是对的,返回true。
1、长度大于1时,判断第一个字母大小写,虽然无论第一个字母是大写还是小写都可以是对的,返回true。
2、在首字母为大写时,统计后面所有字母的大小个数,如果都为大写,或者都为小写,如USA ,Google,那返回true,否则false
3、如果首字母为小写时,统计后面字母全为小写字母,如word、则返回true,否则false
代码如下:
public static boolean detectCapitalUse(String word) {
boolean result = false;
int cnt1 = 0;
int cnt2 = 0;
int length = word.length();
char s1 = word.charAt(0);
boolean upper = Character.isUpperCase(s1);
if (length == 1) {
result = true;
}
else
{
if (upper) {
for (int index = 1;index < word.length();index++) {
char s = word.charAt(index);
if(Character.isUpperCase(s)) {
cnt1++;
}
if(Character.isLowerCase(s)) {
cnt2++;
}
if((cnt1 == word.length() - 1 ) || (cnt2 == word.length() - 1 )){
result = true;
}
else {
result = false;
}
}
System.out.println("Number of uppercase letters \t" + cnt1);
System.out.println("Number of isLowerCase letters \t" + cnt2);
}
else {
for (int index = 1;index < word.length();index++) {
char s = word.charAt(index);
//char s2 = word.charAt(length);
if(Character.isLowerCase(s)) {
cnt2++;
}
if(cnt2 == word.length() - 1 ){
result = true;
}
else {
result = false;
}
}
}
}
return result;
}
一开始没注意一个字母的情况,返回了false,
单词长度计算少了一个导致worD,这种情况返回true。
最终测试通过,问题解决。