方法一:以前两位为判断基础,分四种情况判断
1 static int wing=[]() 2 { 3 std::ios::sync_with_stdio(false); 4 cin.tie(NULL); 5 return 0; 6 }(); 7 8 class Solution 9 { 10 public: 11 bool detectCapitalUse(string word) 12 { 13 int len=word.length(); 14 if(len==1) 15 return true; 16 if(isupper(word[0])&&isupper(word[1])) 17 { 18 for(int j=2;j<len;j++) 19 if(islower(word[j])) 20 return false; 21 } 22 else if(islower(word[1])) 23 { 24 for(int k=2;k<len;k++) 25 if(isupper(word[k])) 26 return false; 27 } 28 else 29 return false; 30 return true; 31 } 32 };
方法二:扫描,以相邻字符来判断,除了首位,只要两相邻字符大小写不同,则返回false
1 static int wing=[]() 2 { 3 std::ios::sync_with_stdio(false); 4 cin.tie(NULL); 5 return 0; 6 }(); 7 8 class Solution 9 { 10 public: 11 bool detectCapitalUse(string word) 12 { 13 int len=word.length(); 14 for(int i=1;i<len;i++) 15 { 16 if(islower(word[i])&&isupper(word[i-1])&&i!=1) 17 return false; 18 if(isupper(word[i])&&islower(word[i-1])) 19 return false; 20 } 21 return true; 22 } 23 };
第二种方法速度更快,更简单
浙公网安备 33010602011771号