415 有效迴文串

原題網址:https://www.lintcode.com/problem/valid-palindrome/description面試

描述

給定一個字符串,判斷其是否爲一個迴文串。只考慮字母和數字,忽略大小寫。markdown

你是否考慮過,字符串有多是空字符串?這是面試過程當中,面試官經常會問的問題。app

在這個題目中,咱們將空字符串斷定爲有效迴文。函數

您在真實的面試中是否遇到過這個題?  是

樣例

"A man, a plan, a canal: Panama" 是一個迴文。spa

"race a car" 不是一個迴文。.net

挑戰

O(n) 時間複雜度,且不佔用額外空間。指針

標籤
字符串處理
兩根指針
 
 
思路:設置兩根指針,一個從頭開始遍歷,另外一個從尾開始遍歷。若是不是字母或者數字,跳過判斷下一個。若是是,判斷是否相同(注意大小寫字母的判斷),不相同return false。
 
AC代碼:
class Solution { public: /** * @param s: A string * @return: Whether the string is a valid palindrome */ bool isPalindrome(string &s) { // write your code here int n=s.size(); if (n==0) { return true; } int i=0,j=n-1; while(i<=j) { if (tmp(s[i])&&tmp(s[j])) { if (!isSame(s[i],s[j])) { return false; } } if (!tmp(s[i])) { i++; continue; } if (!tmp(s[j])) { j--; continue; } i++; j--; } return true; } bool tmp(char c) { if ((c>='a'&&c<='z')||(c>='A'&&c<='Z')||(c>='0'&&c<='9')) { return true; } return false; } bool isSame(char c1,char c2) { if (c1==c2) { return true; }

if (abs(c1-c2)==abs('a'-'A')) { return true; } return false; } };

 

其餘代碼:
https://blog.csdn.net/ljlstart/article/details/48183745  判斷兩個字符是否相同時,還能夠將兩個字符串都轉換成小寫(或大寫)再判斷,這樣就不用定義額外的判斷相等函數了。
可參考:
相關文章
相關標籤/搜索