leetcode520:檢測大寫字母

三種情況是正確的:

  1. 全是大寫
  2. 全是小寫
  3. 第一個是大寫,其他是小寫

思路就是:

  1. 先判斷特殊情況,如果是隻有一位或沒有位數,則返回正確。
  2. 判斷是否是大小寫,可通過ascii碼錶來看,整數65~90代表大寫。
  3. 再判斷第一個情況,如果第一個爲大寫,則後面全大寫或全小寫都行。
  4. 如果第一個爲小寫,則後面只能小寫。
  5. 然後遍歷,標誌位分別加1
  6. 遍歷完判斷是否滿足以上三種符合的情況

代碼:

bool detectCapitalUse(string word) {
    int da = 0,xiao = 0,flag = 0;
    if(word.size() == 1 || word.size() == 0)
        return true;
    if(word.size() > 1) {
        //如果首字母是小於號,那麼後面的數都要是小的
        if (word[0] < 65 || word[0] > 90)
            flag = 1;
        //如果首字母是大於號,那麼後面要麼全部小,要麼全部大
        else flag = 0;
    }
    //從第二個數開始算
    for(int i = 1; i < word.size(); i ++)
    {
        if(word[i] < 65 || word[i] > 90)
        {
            xiao ++;
        }
        else
        {
            da ++ ;
        }
    }
    if(word.size() - 1 == xiao )
        return true;
    else if(da == word.size() - 1 && flag !=1)
        return true;
    else return false;
}

當然,你也可以寫的更簡單,省略掉da變量。


bool detectCapitalUse(string word) {
    int xiao = 0,flag = 0;
    if(word.size() == 1 || word.size() == 0)
        return true;
    if(word.size() > 1) {
        //如果首字母是小於號,那麼後面的數都要是小的
        if (word[0] < 65 || word[0] > 90)
            flag = 1;
        //如果首字母是大於號,那麼後面要麼全部小,要麼全部大
    }
    //從第二個數開始算
    for(int i = 1; i < word.size(); i ++)
    {
        if(word[i] < 65 || word[i] > 90)
        {
            xiao ++;
        }
    }
    if(word.size() - 1 == xiao || (xiao == 0 && flag !=1) )
        return true;
    else return false;
}

還可以再把最後三句話優雅寫一點,用個三目運算法。

return (word.size() - 1 == xiao || (xiao == 0 && flag !=1)) ? true: false;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章