520检测大写字母
这题是简单题,分情况讨论一下就好了,遍历一遍单词,时间复杂度O(N),空间复杂度O(1)
class Solution {
public:
bool detectCapitalUse(string word) {
int n = word.length();
if(n == 1) return true;
if(word[0] > 'Z'){
for(int i = 1; i < n; i++){
if(word[i] < 'a') return false; //首字母小写,之后出现大写一定false
}
}
else{//首字母大写
if(word[1] < 'a'){
for(int i = 2; i < n; i++){
if(word[i] > 'Z') return false; //第二个字母大写,之后出现小写一定false
}
}
if(word[1] > 'Z'){
for(int i = 2; i < n; i++){
if(word[i] < 'a') return false; //第二个字母小写,之后出现大写一定false
}
}
}
return true;
}
};
125验证回文串
用两个指针,一个左移一个右移,遇到非数字字母就移动,遇到指的两个不同就返回false,时间复杂度O(N),空间复杂度O(1)
class Solution {
public:
bool isPalindrome(string s) {
int n = s.length();
int left = 0;
int right = n - 1;
while(left < right){
while(left < right && !isalnum(s[left])) left++;
while(left < right && !isalnum(s[right])) right--;
if(left < right){
if(tolower(s[left]) != tolower(s[right])) return false;
left++;
right--;
}
}
return true;
}
};
isalnum(a):当a是字母和数字时返回true,否则返回false
tolower(a): 把不论时大小写的a转化为小写