LeetCode--初级算法--字符串类算法:验证回文字符串

时间:2019-02-21
本文章向大家介绍LeetCode--初级算法--字符串类算法:验证回文字符串,主要包括LeetCode--初级算法--字符串类算法:验证回文字符串使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

验证回文字符串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。

示例一

输入: “A man, a plan, a canal: Panama”
输出: true

示例二

输入: “race a car”
输出: false

算法分析:

  • 首先将字符串的所有大写转换为小写。
  • 编写一个函数,判断字符是否是字母和数字字符。是则返回true,否则返回flase.
  • 从两端开始扫描字符串,判断两端的字符是否在范围内,此时分为4中情况:两端均在;前端在,后端不在;前端在,后端不在;两端均不在。然后分别判断。

代码:

class Solution {
public:
   bool isPalindrome(string s) {
       if(s.length() == 0)
           return true;
       transform(s.begin(),s.end(),s.begin(),::tolower);
       cout<<s<<endl;
       int iStart = 0;
       int iEnd = s.length() - 1;
       while(iStart < iEnd)
       {
           //在两端均在范围内
           if(isChar(s[iStart]) && isChar(s[iEnd])){
               //不相同直接退出
               if(s[iStart] != s[iEnd]){
                   return false;
               }
               //相同寻找下一个
               iStart++;
               iEnd--;                
           //前端不在范围,后端在范围
           }else if(!isChar(s[iStart]) && isChar(s[iEnd])){
               iStart++;
           //前端在范围,后端不在
           }else if(isChar(s[iStart]) && !isChar(s[iEnd]))
           {
               iEnd--;
           //两端均不在范围
           }else{
               iStart++;
               iEnd--;
           }
       }
       return true;
   }
   
   //判断字符范围
   bool isChar(char s){
       if((s >= 'a' && s <= 'z') || (s >= '0' && s <= '9')){
           return true;
       }
       
       return false;
   }
};