題目描述
給定一個單詞,你需要判斷單詞的大寫使用是否正確。
我們定義,在以下情況時,單詞的大寫用法是否正確:
- 全部字母都是大寫,比如
“USA”
; - 單詞中所有字母都不大寫,比如
"leetcode"
; - 如果單詞不只含有一個字母,只有首字母大寫,比如
"Google"
;
否則,我們定義這個單詞沒有正確使用大寫字母。
示例1:
輸入: “USA”
輸出: True
示例2:
輸入: “FlaG”
輸出: False
注意:
輸入是由大寫和小寫拉丁字母組成的非空字符。
思路分析
難度是簡單 ,這裏我們總結判斷題中爲true
的情況,不妨設numUpper
爲字符串中大寫字母的個數:
- 全爲大寫字母,即
numUpper = s.length()
; - 無大寫字母,即
numUpper = 0
; - 首字母爲大寫,且大寫字母個數僅爲
1
,即numUpper = 1 && s.charAt(0) - 'A' >= 25
則我們需要兩步:
- 先遍歷字符串,得到大寫字母個數
numUpper
; - 判斷是否符合上述3個情況;
解題代碼
public static boolean solution(String s) {
if(s == null || s.length() == 0) return false;
int numUpper = 0;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) - 'A'<= 25)
numUpper++;
}
if(numUpper == s.length()
|| numUpper == 0
|| (numUpper == 1 && (s.charAt(0) - 'A'<= 25)))
return true;
return false;
}
複雜度分析
這裏我們設n
爲輸入字符串的長度;
時間複雜度: 我們對字符串進行了一次遍歷,時間複雜度爲O(n)
;
空間複雜度: 沒有藉助輔助容器,故空間複雜度爲O(1)
;
Github源碼
完整可運行文件請訪問GitHub。