验证回文串
描述:🤔
错误代码
c语言代码⬇️
错误原因:
通过代码
通过代码1⬇️
从头到尾硬遍历,感觉多少有点不太美丽。
//思路:1.遇字符保留 2.对撞遍历
bool isPalindrome(char * s){
int i = 0;
int j = 0;
while(s[i] != '\0'){
if(s[i] >= 'a' && s[i] <= 'z'){
s[j] = s[i];
i++;
j++;
}else if(s[i] >= 'A' && s[i] <= 'Z'){
int t = s[i] - 'A';
s[j] = 'a' + t;
i++;
j++;
}else if(s[i] >= '0' && s[i] <= '9'){
s[j] = s[i];
i++;
j++;
}
else{
i++;
}
}
int l = 0;
int r = j-1;
while(l < r){
if(s[l] != s[r])
return false;
l++;
r--;
}
return true;
}
4ms 75%
6MB 64%
通过代码2⬇️
直接对撞,偷懒了一点,但感觉时间上差不多
//思路2:不如直接对撞
bool isNumOrAlpha(char *c){
if(*c >= 'a' && *c <= 'z'){
return true;
}
if(*c >= 'A' && *c <= 'Z'){
*c = *c - 'A' + 'a';
return true;
}
if(*c >= '0' && *c <= '9'){
return true;
}
return false;
}
bool isPalindrome(char * s){
int i = 0;
int j = 0;
while(s[j] != '\0'){
j++;
}
while(i < j){
if(!isNumOrAlpha(&s[i])){
i++;
continue;
}
if(!isNumOrAlpha(&s[j])){
j--;
continue;
}
if(s[i] == s[j]){
i++;
j--;
}else{
return false;
}
}
return true;
}
4ms 75%
6.2MB 39%
果然时间一样,只是代码清晰了一点,因为调用函数还增加了存储空间。
总结
总结:
新手做题,点到为止
通过即可,不宜深究
告辞。