在百度上百度双指针,大部分都说的是二级指针,对于这个题目,所使用的双指针,并非二级指针。
而是两个指向数组首尾的指向。
如图:
首先对数组进行排序,将头指针与尾指针指向的数进行相加,如果小于目标数,头指针向后移动一次,如果大于目标数,尾指针向前移动一个位置;
直到等于目标数结束。然后将两个位置的数与原数组进行检索,找到下标。
代码如下;
bool isPalindrome(char* s) {//双指针做法,,,
int flag = 1;
char *p, *q;
p = s;
q = &s[strlen(s) - 1];
while(q > p){
if(*p >='a' && *p <= 'z' || *p >= 'A' && *p <= 'Z' || *p>='0' && *p <= '9'){
if(*q >='a' && *q <= 'z' || *q >= 'A' && *q <= 'Z' || *q >= '0' && *q <= '9'){
if(*p >= 'A' && *p <= 'Z'){
*p = *p - 'A' + 'a';
}
if(*q >= 'A' && *q <= 'Z'){
*q = *q - 'A' + 'a';
}
if(*p == *q){
p++;
q--;
} else{
flag = 0;
break;
}
} else{
q--;
}
} else{
p++;
}
}
if(flag) return true;
else return false;
}
双指针的运用:(回文串的判定,遇见非字母或数字就跳过)
关于双个指针的运用,从数组两头进行遍历,使得程序的运行耗时的到减少,在顺序表的操作中经常能看到它的身影,栈的栈顶与栈底指向等等。