方法一:以前两位为判断基础,分四种情况判断

 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 };

第二种方法速度更快,更简单

 

posted on 2018-06-04 10:24  高数考了59  阅读(108)  评论(0)    收藏  举报