您的位置:首页 > 编程语言 > Go语言

golang_算法: leetcode_字符串05-验证回文字符串

2019-03-12 20:15 686 查看
版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/weixin_43851310/article/details/88428171

方法1:

package main

import "fmt"

//大小写字母算一个,逗号空格和其它特殊字符略过
func isPalindrome(s string) bool {
bytearr1 := make([]rune,3)
bytearr2 := make([]rune,3)

for _, v := range s {
if v >= 'A' && v <= 'Z' {
v += 'a' - 'A'
bytearr1 = append(bytearr1, v)
fmt.Printf("添加的byte:%c\n",v)
}else if v >= 'a' && v <= 'z' {
bytearr1 = append(bytearr1, v)
fmt.Printf("添加的byte:%c\n",v)
}else if v >= '0' && v <= '9' {
bytearr1 = append(bytearr1, v)
fmt.Printf("添加的byte:%c\n",v)
}
}
fmt.Println("bytearr1 =",bytearr1)

for i := len(s)-1; i >= 0; i-- {
if s[i] >= 'A' && s[i] <= 'Z' {
bytearr2 = append(bytearr2, rune(s[i] + 'a' - 'A'))
fmt.Printf("下标:%d,添加的byte:%c\n",i,s[i])
}else if s[i] >= 'a' && s[i] <= 'z' {
bytearr2 = append(bytearr2, rune(s[i]))
fmt.Printf("下标:%d,添加的byte:%c\n",i,s[i])
}else if s[i] >= '0' && s[i] <= '9' {
bytearr2 = append(bytearr2, rune(s[i]))
fmt.Printf("下标:%d,添加的byte:%c\n",i,s[i])
}

}
fmt.Println("bytearr2 =",bytearr2)

if StringSliceEqualBCE(bytearr1,bytearr2) {
return true
}
return false
}

//判断两个slice是否相等
func StringSliceEqualBCE(a, b []rune) bool {
if len(a) != len(b) {
return false
}

if (a == nil) != (b == nil) {
return false
}

b = b[:len(a)]
for i, v := range a {
if v != b[i] {
return false
}
}
return true
}

func main() {
//s := "A man, a plan, a canal: Panama"
s := "0P0"
fmt.Println(isPalindrome(s))
}

Output:

添加的byte:0
添加的byte:p
添加的byte:0
bytearr1 = [0 0 0 48 112 48]
下标:2,添加的byte:0
下标:1,添加的byte:P
下标:0,添加的byte:0
bytearr2 = [0 0 0 48 112 48]
true

其它方法可以利用:

  1. 正则表达式regexp.MustComplied(’[\w]+’)来筛选("\w"表示字母、数字、下划线)
  2. strings.ToLower转化为小写字母
func isPalindrome(s string) bool {
reg := regexp.MustCompile(`[\w]+`)
str := strings.ToLower(strings.Join(reg.FindAllString(s, -1),""))

for i,j:=0,len(str)-1;i<j;i,j = i+1,j-1  {
if str[i] != str[j]{
return false
}
}
return true
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: