zoukankan      html  css  js  c++  java
  • Leetcode Valid Palindrome

    我发现最近做题,我总是被“阵势”唬住,不管什么题,就先觉得自己不会了,不想去思考,这种习惯比较可怕。其实任何难题,只要你学会分解它,并逐一击破,其实你发现你是可以解决的。

    就像这道题,一个是要“删去”非正常字符例如':空格呀什么的,最后要的只有数字和字符。所以要有一个函数判断是否有效isValid。还有一点,就是大小写转换,坑爹C++里没有直接对字符串进行大小写转换的,刚开始看的是一个JAVA的代码。没错,我不是自己做出来的T.T,JAVA里是有对字符串进行大小写转换的。所以需要一个对字符转换的函数。其实有一个tolower的函数,当然你也可以进行c+32或者记不住的就是c-'A'+'a'。最后就是判断函数了,从第一个有效字符以及最后一个有效字符开始判断。附代码。

    class Solution {  
    public:  
        bool isValid(char c)  
        {  
            if('a' <= c && c <= 'z') return true;  
            if('A' <= c && c <= 'Z') return true;  
            if('0' <= c && c <= '9') return true;  
            return false;  
        }  
        char lowerCase(char c)  
        {  
            if('A' <= c && c <= 'Z') return c+32;  
            else return c;  
        }  
        bool isPalindrome(string s) {  
            if(s=="") return true;
            int l = 0;  
            int r = s.size()-1;  
    
            
            while(l < r)  
            {  
                while(!isValid(s[l])){ 
                    l++;  //去掉所有非正常字符,才开始比较
                    if(l>=r) return true; //比较结束前没有返回false就返回true
                }
                
                while(!isValid(s[r])){
                    r--;
                    if(l>=r) return true;
                }
                if(lowerCase(s[l]) != lowerCase(s[r]))  return false;
                l++;
                r--;
            }  
            return true;  
        }  
    }; 
  • 相关阅读:
    GNU计划的起因及其现状
    【KVM新概念】 虚拟机CPU热拔插
    Amazon vs Google 云服务
    【笨木头Cocos2dx 039】战争迷雾效果 第02章_先把地图加进来
    【C++11】新特性——auto的使用
    Netty4 SEDA 事件驱动原理分析
    error ,exception
    Compiling Java with makefile
    (二)Centos7下Yum更新安装PHP5.5,5.6,7.0
    CentOS7.0下安装FTP服务的方法
  • 原文地址:https://www.cnblogs.com/LUO77/p/4930615.html
Copyright © 2011-2022 走看看