首页 > 后端开发 > Golang > 检查回文的另一种方法

检查回文的另一种方法

Patricia Arquette
发布: 2025-01-01 07:39:10
原创
906 人浏览过

这些天,我浏览 Linkedin 和 Twitter,看到一个非常常见的编码挑战:检查字符串是否是回文。

这是一个非常简单的挑战。回文是可以向内和向后读相同的单词或短语。就像:

  • 泰赛特
  • 妈妈
  • 比亚布

等等。

但是人们遵循的一般方法是这样的:

Another way to check palindromes

换句话说,他们获取原始字符串,然后反转它,然后将其与原始字符串进行比较。
这是一个非常有效的方法,但我想建议一个聪明的方法。

看到您需要为字符串生成一个新的分配,然后逐个字符进行比较。更具挑战性的是,如何使用 O(1) 更多内存并进行更少比较?

让我更好地解释一下。

解决这个问题的更好方法是使用两指针方法。

字符串只不过是一个字符数组,我们可以逐个字符地遍历它,并对数组中的任何字符进行遍历和比较。

让我们使用两个指针的新方法来重构它。
我们需要做的第一件事是从中取出符文切片:

  r := []rune(str);
登录后复制

Go 中的字符串是只读的,所以基本上,字符串是不可变的,无法更改。符文切片,否则可以更改,然后,两者之间的转换会复制字符串字节,但是,我们不会在这里复制另一个副本,因为我们将在同一个堆栈帧中继续,并且我们不会将产生一个新字符串。

之后,我们将开始循环,一个指针位于符文的开头,另一个指针位于符文的末尾,我们将遍历它,直到一个指针与另一个指针交叉。我们将在这里进行比较:

func isPalindrome(str string) bool {
    r := []rune(str)
    for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
        if r[i] != r[j] {
            return false
        }
    }
    return true
}
登录后复制

这样,如果比较顺利,并且所有字符都相同,那么它就是回文。否则,立即返回 false。

以上是检查回文的另一种方法的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板