所以我正在学习C语言,为了练习,我做了一些"LeetCode"挑战.对于回文判断器,我try 了两种方法,一种使用索引,另一种使用指针.
- 这种巨大的表现差异来自哪里?
作为一个后续问题:
- 通常首选的方法是什么?原因是什么?
以下是代码块以供参考.
Pointers:个
bool isPalindrome(char *s) {
size_t length = strlen(s);
char *left = s;
char *right = s + length - 1;
while (left < right) {
while (left < right && !isalnum(*left))
++left;
if (left == right)
return true;
while (right > left && !isalnum(*right))
--right;
if (right == left)
return true;
if (tolower(*left) != tolower(*right))
return false;
++left;
--right;
}
return true;
}
Indices:个
bool isPalindrome(char *s) {
size_t length = strlen(s);
size_t left = 0;
size_t right = length - 1;
while (left < right) {
while (left < right && !isalnum(s[left]))
++left;
if (s[left] == '\0')
return true;
while (right > left && !isalnum(s[right]))
--right;
if (right == 0)
return true;
if (tolower(s[left]) != tolower(s[right]))
return false;
++left;
--right;
}
return true;
}