当前位置: 首页 > news >正文

昆明门户网站科技公司网站制作公司

昆明门户网站,科技公司网站制作公司,济南做网站得多少钱,襄阳做网站 优帮云LCR 018. 验证回文串 验证回文串 给定一个字符串 s ,验证 s 是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 本题中,将空字符串定义为有效的回文串 。 验证回文串 LCR 018. 验证回文串方法一:**筛选 判断…

LCR 018. 验证回文串

验证回文串

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

验证回文串

  • LCR 018. 验证回文串
  • 方法一:**筛选 + 判断**
    • 第一种是使用语言中的字符串翻转 API 得到 sgood 的逆序字符串 sgood_rev,只要这两个字符串相同,那么 sgood 就是回文串。
    • 第二种是使用**双指针**。
  • 方法二:**在原字符串上直接判断**
  • Char.IsLetterOrDigit 方法
  • charAt() 方法
  • toLowerCase() 方法

方法一:筛选 + 判断

最简单的方法是对字符串 s 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串 sgood 中。这样我们只需要判断 sgood 是否是一个普通的回文串即可。
判断的方法有两种。

第一种是使用语言中的字符串翻转 API 得到 sgood 的逆序字符串 sgood_rev,只要这两个字符串相同,那么 sgood 就是回文串。

class Solution {public boolean isPalindrome(String s) {StringBuffer sgood = new StringBuffer();int length = s.length();for (int i = 0; i < length; i++) {char ch = s.charAt(i);if (Character.isLetterOrDigit(ch)) {sgood.append(Character.toLowerCase(ch));}}StringBuffer sgood_rev = new StringBuffer(sgood).reverse();return sgood.toString().equals(sgood_rev.toString());}
}

第二种是使用双指针

初始时,左右指针分别指向 sgood 的两侧,随后我们不断地将这两个指针相向移动,每次移动一步,并判断这两个指针指向的字符是否相同。当这两个指针相遇时,就说明 sgood 时回文串。

class Solution {public boolean isPalindrome(String s) {StringBuffer sgood = new StringBuffer();int length = s.length();for (int i = 0; i < length; i++) {char ch = s.charAt(i);if (Character.isLetterOrDigit(ch)) {sgood.append(Character.toLowerCase(ch));}}int n = sgood.length();int left = 0, right = n - 1;while (left < right) {if (Character.toLowerCase(sgood.charAt(left)) != Character.toLowerCase(sgood.charAt(right))) {return false;}++left;--right;}return true;}
}

复杂度分析
时间复杂度:O(∣s∣),其中 ∣s∣ 是字符串 s 的长度。
空间复杂度:O(∣s∣)。由于我们需要将所有的字母和数字字符存放在另一个字符串中,在最坏情况下,新的字符串 sgood 与原字符串 s 完全相同,因此需要使用 O(∣s∣) 的空间。

方法二:在原字符串上直接判断

我们可以对方法一中第二种判断回文串的方法进行优化,就可以得到只使用 O(1) 空间的算法。
我们直接在原字符串 s 上使用双指针。在移动任意一个指针时,需要不断地向另一指针的方向移动,直到遇到一个字母或数字字符,或者两指针重合为止。也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。

class Solution {public boolean isPalindrome(String s) {int n = s.length();int left = 0, right = n - 1;while (left < right) {while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {++left;}while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {--right;}if (left < right) {if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {return false;}++left;--right;}}return true;}
}

复杂度分析
时间复杂度:O(∣s∣),其中 ∣s∣ 是字符串 s 的长度。
空间复杂度:O(1)。

Char.IsLetterOrDigit 方法

定义
指示 Unicode 字符是否属于字母或十进制数字类别。

重载
IsLetterOrDigit(Char)
指示指定的 Unicode 字符是否属于字母或十进制数字类别。

IsLetterOrDigit(String, Int32)
指示指定字符串中位于指定位置处的字符是否属于字母或十进制数字类别。

charAt() 方法

用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。

语法
public char charAt(int index)
参数
index – 字符的索引。

返回值
返回指定索引处的字符。

toLowerCase() 方法

toLowerCase() 方法用于将大写字符转换为小写。

http://www.dt0577.cn/news/13783.html

相关文章:

  • 仿微信主题wordpress北京排名seo
  • 电子工程设计网站百度seo怎么优化
  • js源码下载从哪个网站能下载营销管理培训课程
  • 做影视后期有哪些资源网站自媒体推广平台
  • 建设部网站资质查询6短视频营销推广方式
  • 如何通过网站后台修改网站海口做网站的公司
  • 珠海网站小型项目外包网站
  • 专业做模具钢的网站企业网站的搜索引擎推广与优化
  • 个人做网站打开百度网站
  • dw网站模版湖南seo优化排名
  • 镇江网站制作案例泰州seo公司
  • 有域名怎样做网站seo系统培训哪家好
  • 本地佛山顺德网站建设进入百度搜索首页
  • 手机网站优化 工具百度通用网址
  • 怎么制作企业网站文案发布平台
  • 怎么建设h5网站简单制作html静态网页
  • 子目录 独立的网站seo推广优化官网
  • g3云推广是哪家公司的苏州优化网站公司
  • java怎么做3d游戏下载网站网页设计制作网站html代码大全
  • 怎样自己做qq网站营销型网站建设团队
  • 文创产品设计就业前景逆冬黑帽seo培训
  • 上海找做网站公司添加友情链接的技巧
  • 做视频网站 服务器配置自助建站seo
  • 福建住房与城乡建设网站南宁seo多少钱报价
  • 网站开发属于专利吗全国疫情最新信息
  • 什么网站可以做期货北京百度关键词推广
  • 南昌污水厂最新数据天津seo霸屏
  • 怎么做网站的营销目前最新的营销方式有哪些
  • 哈尔滨做网站哪家便宜百度搜索网页版入口
  • 长沙 网站建设软文推广网