文章目錄
- 題目
- 思路
- 代碼
- 復雜度分析
- 時間復雜度
- 空間復雜度
- 結果
- 總結
題目
題目鏈接🔗
我們定義,在以下情況時,單詞的大寫用法是正確的:
- 全部字母都是大寫,比如 “USA” 。
- 單詞中所有字母都不是大寫,比如 “leetcode” 。
- 如果單詞不只含有一個字母,只有首字母大寫, 比如 “Google” 。
給你一個字符串 word 。如果大寫用法正確,返回 true ;否則,返回 false 。
示例 1:
輸入:word = “USA”
輸出:true
示例 2:
輸入:word = “FlaG”
輸出:false
提示:
- 1 ≤ w o r d . l e n g t h ≤ 100 1 \leq word.length \leq 100 1≤word.length≤100
- w o r d word word 由小寫和大寫英文字母組成
思路
統計單詞中大寫字母的個數n
- 若 n = = w o r d . s i z e ( ) n == word.size() n==word.size() 說明全為大寫
- 若 n = = 1 n==1 n==1 && w o r d [ 0 ] ≤ ′ Z ′ word[0] \leq 'Z' word[0]≤′Z′ && w o r d [ 0 ] ≥ ′ A ′ word[0] \geq 'A' word[0]≥′A′ 說明只有一個大寫且為開頭
- 若 n = = 0 n==0 n==0說明單詞全小寫 除上述情況返回 t r u e true true外,其余情況都不符合,返回 f a l s e false false
代碼
class Solution {
public:bool detectCapitalUse(string word) {int n = word.size(), cnt = 0;for(auto& ch: word) {if(ch <= 'Z' && ch >= 'A') ++cnt;}return cnt == 0 || cnt == word.size() || cnt == 1 && word[0] <= 'Z' && word[0] >= 'A';}
};
復雜度分析
時間復雜度
- 時間復雜度:O(n),其中 n 是字符串 word 的長度。我們只需要遍歷一次字符串即可。
空間復雜度
- 空間復雜度:O(1),只需要常數級別的額外空間。
結果
總結
本題是一個簡單的字符串處理問題,關鍵在于理解題目要求的三種大寫使用情況,并據此統計大寫字母的數量,然后進行判斷。通過一次遍歷即可解決問題,時間效率較高。