算法修煉之路—【字符串】Leetcode 520 檢測大寫字母

題目描述

給定一個單詞,你需要判斷單詞的大寫使用是否正確。

我們定義,在以下情況時,單詞的大寫用法是否正確:

  1. 全部字母都是大寫,比如“USA”
  2. 單詞中所有字母都不大寫,比如"leetcode"
  3. 如果單詞不只含有一個字母,只有首字母大寫,比如"Google"

否則,我們定義這個單詞沒有正確使用大寫字母。

示例1:

輸入: “USA”
輸出: True

示例2:

輸入: “FlaG”
輸出: False

注意:
輸入是由大寫和小寫拉丁字母組成的非空字符。

思路分析

難度是簡單 ,這裏我們總結判斷題中爲true的情況,不妨設numUpper爲字符串中大寫字母的個數:

  1. 全爲大寫字母,即numUpper = s.length();
  2. 無大寫字母,即numUpper = 0
  3. 首字母爲大寫,且大寫字母個數僅爲1,即numUpper = 1 && s.charAt(0) - 'A' >= 25

則我們需要兩步:

  1. 先遍歷字符串,得到大寫字母個數numUpper;
  2. 判斷是否符合上述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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章