LeetCode-Easy部分中标签为Two Pointers 125. Valid Palindrome

来源:互联网 发布:php命名空间找不到类 编辑:程序博客网 时间:2024/05/21 01:53

原题

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:
1. 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.

题目分析

判断一个字符串是不是回文 字符串。

首、尾指针分别指向有效字符或数字,一一比较,若过程中出现不等,直接返回false,若两个指针碰头了,表示字符首、尾都相等,返回true。

代码实现

    public class Solution    {        public bool IsPalindrome(string s)        {            int i, j;            if (s == string.Empty) return true;            for (i = 0, j = s.Length - 1; i < s.Length && j > 0; i++, j--)            {                while (i < s.Length && !isAlphanumeric(s[i]))                    i++;                while (i < j && !isAlphanumeric(s[j]))                    j--;                if (i >= j) //碰头表示成功!                    break;                if (!isEqual(s[i], s[j]))                    return false;            }            return true;        }

判断一个字符是不是数字或字母:

        private bool isAlphanumeric(char c)        {            return char.IsLetter(c) || char.IsDigit(c);        }

判断字符是否相等,忽略大小写:

        private bool isEqual(char c1, char c2)        {            //要做字符和字母的区别对待,数字和字母字符一定不相等。            if (char.IsDigit(c1) && char.IsLetter(c2))                return false;            if (char.IsDigit(c2) && char.IsLetter(c1))                return false;            //如果不考虑以上,请参考数字0和字符P的取值。            if (c1 == c2) return true;            int c1int = Convert.ToInt32(c1);            int c2int = Convert.ToInt32(c2);            return Math.Abs(c1int - c2int) == 32;        }

标签为Two Pointers的更多题目

http://blog.csdn.net/daigualu/article/details/69236015

2 0
原创粉丝点击