判断是否是回文字符串(leetcode 125)
一:解题思路
Time:O(n),Space:O(1)
二:完整代码示例 (C、C++、Java、Python)
方法一C:
bool isNumberOrCharacter(char c) { return (c>='A' && c<='Z') || (c>='a' && c<='z') || (c>='0' && c<='9'); } bool isEqualIgnoreCase(char a, char b) { if (a >= 'A' && a <= 'Z') a += 32; if (b >= 'A' && b <= 'Z') b += 32; return (a==b); } bool isPalindrome(char * s) { if (s == NULL) return true; int i = 0; int j = strlen(s) - 1; while (i < j) { for (;i < j; i++, j--) { while (i < j && !isNumberOrCharacter(s[i])) i++; while (i < j && !isNumberOrCharacter(s[j])) j--; if (i<j && !isEqualIgnoreCase(s[i], s[j])) return false; } } return true; }
方法一C++:
class Solution { private: bool isNumberOrCharacter(char c) { return (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9'); } bool isEqualIngoreCase(char a, char b) { if (a >= 'A' && a <= 'Z') a += 32; if (b >= 'A' && b <= 'Z') b += 32; return (a==b); } public: bool isPalindrome(string s) { if (s.length() == 0) return true; int i = 0; int j = s.length() - 1; while (i < j) { for (; i < j; i++, j--) { while (i < j && !isNumberOrCharacter(s[i])) i++; while (i < j && !isNumberOrCharacter(s[j])) j--; if (i<j && !isEqualIngoreCase(s[i], s[j])) return false; } } return true; } };
方法一Java:
方法一Python:
class Solution: def isPalindrome(self, s: str) -> bool: if not s: return True n=len(s) i,j=0,n-1 while i<j: while i<j and not s[i].isalnum(): i=i+1 while i<j and not s[j].isalnum(): j=j-1 if i<j: if s[i].lower()!=s[j].lower(): return False i,j=i+1,j-1 return True

浙公网安备 33010602011771号