Leetcode 520 - Detect Capital

題目

Problem#

給你一個字串 s 問你能不能判斷它是不是: 全大寫、第一個字大寫其他小寫、全小寫。如果一個字串是以上三種情況,則返回 true ;否則,返回 false

想法#

寫個狀態機判斷

  • 時間複雜度: $\mathcal{O}(n)$
  • 空間複雜度: $\mathcal{O}(1)$

AC Code#

賞析#

  • 直接判斷不是的 case
1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
bool detectCapitalUse(string word) {
for(int i = 1; i < word.size(); i++){
if(isupper(word[1]) != isupper(word[i]) || // 第二個字是大寫 後面出現小寫
islower(word[0]) && isupper(word[i])) // 第一個字是小寫 後面出現大寫
return false;
}
return true;
}
};
  • 判斷大寫出現次數: 掃過一遍紀錄大寫次數,返回 true 的條件不是全部都大寫,不然就是出現一次且在第一個,或是沒有大寫
  • 也有看到直接用 regex 爆破的(這是作弊吧ww)