LeetCode第125题:验证回文串

作者 the7
发布于 2020年02月27日
评论 0
浏览 156

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

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

示例 2:

输入: "race a car"
输出: false

思路一

将合法字符串(字母、数字)同时添加至队列和栈,再利用栈后入先出特性,队列先入先出特性,如果完全一样,说明即为回文字符串。

bool IsPalindrome(string s)
 {
            var stack = new Stack<uint>();
            var queue = new Queue<uint>();
            foreach (var t in s)
            {
                var ascii = (uint) t;
                if ((ascii >= 48 && ascii <= 57)||(ascii >= 65 && ascii <= 90))
                {
                    stack.Push(ascii); 
                    queue.Enqueue(ascii);
                }

                if (ascii >= 97 && ascii <= 122)
                {
                    stack.Push(ascii - 32);
                    queue.Enqueue(ascii-32);
                }
            }

            for (var i = 0; i < stack.Count; i++)
            {
                if (stack.Pop() != queue.Dequeue()) return false;
            }

            return true;
}

思路二

利用双指针(头、尾)向中间移动进行夹B操作,如果遇到非字母数字字符串,就跳过该字符串,继续移动,如果所有比较都通过,则为回文字符串。

bool IsPalindrome4(string s)
{
            var headIdx = 0;
            var endIdx = s.Length - 1;

            while (headIdx<=endIdx)
            {
                var headAsc = (int) s[headIdx];
                
                if (headAsc >= 48 && headAsc <= 57 || 
                    headAsc >= 65 && headAsc <= 90 ||
                    headAsc >= 97 && headAsc <= 122)
                {
                    if (headAsc >= 97)
                    {
                        headAsc = headAsc - 32;
                    }
                }
                else
                {
                    headIdx++;
                    continue;
                }
                
                var endAsc = (int) s[endIdx];
                if (endAsc >= 48 && endAsc <= 57 || 
                    endAsc >= 65 && endAsc <= 90 ||
                    endAsc >= 97 && endAsc <= 122)
                {
                    if (endAsc >= 97)
                    {
                        endAsc = endAsc - 32;
                    }
                }
                else
                {
                    endIdx--;
                    continue;
                }

                if (headAsc != endAsc) 
                    return false;
                else
                {
                    headIdx++;
                    endIdx--;
                }
            }

            return true;
}

0条评论

请先登录后发表评论
提交评论
标签云
css (1) less calc (1) C# (4) C#进制转换 (1) asp.net core (8) Authentication (1) 注销 (1) 登录 (1) 验证 (1) scroll-view (1) 微信小程序 (4) 滚动到底部 (1) StackExchange.Redis (1) google (1) 百度 (1) nginx (2) 大文件 (2) 微信小程序c#解密 (1) 微信小程序获取手机号 (1) openid (1) session_key (1) CDN (1) URL鉴权 (1) 阿里云 (1) async (1) await (1) 禁止下拉上滑效果 (1) Index类型 (1) Range类型 (1) dontent publish (1) dotnet publish在线生成器 (1) System.DrawingCore.GDIPlus报错 (1) centos (1) 中文字体 (1) SqlBulkCopy (1) SqlSugar (1) JWT (5) 认证 (3) RSA JWT (1) 非对称加密 (1) 写信 (1) 见字如面 (1) 优化建议 (2) 正确操作字符串 (1) Java (1) JWT退出 (1) RefreshToken (1) .NET Core网站开发框架 (1) Moz (3) 墨子 (1) JSON.NET (1) Newtonsoft (1) System.Text.Json (1) 自定义后台路径 (1) .netcore (1) quartz (2) 作业调度框架 (1) 作业调度 (1) 定时任务 (1) exception (1) 异常处理 (1) HttpClient (1) IHttpClientFactory (1) RDM (1) Redis (1) Redis Desktop Manager (1) RedisDesktopManager (1) linux (1) mac (1) windows (1) Could not get any response (1) postman (1) leetcode (2) 力扣 (1) 回文字符串 (1) 面试刷题 (1) centos7 (1) php安装 (1) 网易云插件 (1) 马甲App (1) Discuz插件 (1) 网易云音乐 (1) Blazor (1) 五子棋 (1) c#解题 (1) 最长连续序列 (1) Swagger (1) 在线文档 (1) blob (1) mp4 (1) 视频 (1) big file (1) 上传 (1) s (1) Azure (1) Azure Key Vault (1) Configuration (1) 密钥保管库 (1) Dapper安装 (1) Dapper是什么 (1) Dapper连接Mysql (1) Dapper连接SqlServer (1) dapper (1)