給定一個字符串,驗證它是否是迴文串,只考慮字母和數字字符,可以忽略字母的大小寫。
說明:本題中,我們將空字符串定義爲有效的迴文串。
示例 1:
輸入: "A man, a plan, a canal: Panama"
輸出: true
示例 2:
輸入: "race a car"
輸出: false
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-palindrome
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
/**
Problem:
給定一個字符串,驗證它是否是迴文串,只考慮字母和數字字符,可以忽略字母的大小寫。
說明:
本題中,我們將空字符串定義爲有效的迴文串。
@author :Gallery
**/
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
/**
思路一: 設定兩個指針遍歷數組,首先判定是否
*/
bool isPalindrome(char * s){
int len = strlen(s);
///判0
if (0==len)
return true;
///循環處理
int i,j;
///大小寫轉換,本處暫時不採用轉換!!!!!!注意存在一個問題數字0和大寫P,也能通過邏輯,因此最內部判斷分開處理數字和字母
///讀者進行大小寫轉換改變一下邏輯就不會存在此問題
for( i =0 , j = len-1;i<=j;){
if(('0'<=s[i]&&'9'>=s[i])||('a'<= s[i] && 'z' >= s[i])||('A'<= s[i] && 'Z' >= s[i])){
if(('0'<=s[j]&&'9'>=s[j])||('a'<= s[j] && 'z' >= s[j])||('A'<= s[j] && 'Z' >= s[j])){
if(('0'<=s[j]&&'9'>=s[j])||('0'<=s[i]&&'9'>=s[i])){
if(s[i] == s[j]){
i++;
j--;
}else{
return false;
}
}else if(s[i] == s[j] || s[i]+ 32==s[j]||s[j]+32 == s[i]){
i++;
j--;
}else{
return false;
}
// if(s[i] == s[j] || s[i]+ 32==s[j]||s[j]+32 == s[i]){
// printf("\ns[%d] == %c s[%d] ==%c",i+1,s[i],j+1,s[j]);
// i++;
// j--;
//
// }else{
// printf("\n##########\ns[%d] == %c s[%d] ==%c",i+1,s[i],j+1,s[j]);
// return false;
// }
}else{
j--;
continue;
}
}else{
i++;
continue;
}
}
return true;
}
int main(void){
char arr[] = "A man, a plan, a canal: Panama";
char arr1[] = "race a car";
char arr2[]= "";
char arr3[] = "Op";
char arr4[] = "0p";
char arr5[] = "a";
char arr6[] ="0P";
char a = '0';
char b = 'A';
bool result = isPalindrome(arr6);
printf("\n%d",result);
return 0;
}