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

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

    For example,
    "A man, a plan, a canal: Panama" is a palindrome.
    "race a car" is not a palindrome.

    Note:
    Have you consider that the string might be empty? This is a good question to ask during an interview.

    For the purpose of this problem, we define empty string as valid palindrome.

    题目大意:给一个字符串,判断它是否是回文,只考虑字母数字字符,并且忽略大小写。

    分析:可用双指针解决,i指向头,j指向尾,先用tolower()函数(如果是大写字母才将其转换为小写字母,否则不变),将大写字母转换为小写字母,如果s[i]和是s[j]都是字母,判断是否相等,如果不相等,直接返回false,否则i++,j--;如果有一个不是字母,那么对应移动指针。循环条件i <= j;循环结束后还没有返回,则说明是回文,返回true;

     1 class Solution {
     2 public:
     3     bool isAlphanumericCharacters(char s){
     4         return (s >= 'a' && s <= 'z') || (s >= '0' && s <= '9');
     5     }
     6     bool isPalindrome(string s) {
     7         int len = s.length();
     8         if(len == 0)
     9             return true;
    10         for(int i = 0, j = len - 1; i <= j; ){
    11             char c1 = tolower(s[i]), c2 = tolower(s[j]);
    12             //如果c1和c2都是字母;
    13             if(isAlphanumericCharacters(c1) && isAlphanumericCharacters(c2)) {
    14                 //判断是否相等
    15                 if(c1 == c2){
    16                     i++;
    17                     j--;
    18                 //不相等直接返回false;
    19                 } else {
    20                     return false;
    21                 }
    22             //如果c1是字母,c2不是字母
    23             } else if (isAlphanumericCharacters(c1) && !isAlphanumericCharacters(c2)){
    24                 j--;
    25             //如果c1不是字母,c2是字母;
    26             } else if (!isAlphanumericCharacters(c1) && isAlphanumericCharacters(c2)){
    27                 i++;
    28             //都不是字母
    29             } else {
    30                 i++;
    31                 j--;
    32             }
    33         }
    34         return true;
    35     }
    36 };
  • 相关阅读:
    04: Dom
    03: JavaScript基础
    02: css常用属性
    01: html常用标签
    03: Memcached
    01: Redis缓存系统
    01: RabbitMQ
    04: 事件驱动、五种I/O操作、I/O多路复用select和epoll
    03: 进程、线程、协程
    [Android] 任意时刻从子线程切换到主线程的实现
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/5843717.html
Copyright © 2011-2022 走看看