判断字符串是否属于回文字符串
Mar 1, 2022
判断字符串是否属于回文字符串
题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
回文字符串:即正着看,反着看,都是一样的,比如:level,noon
解题
- 现将字符串的特殊符号全部去掉,因为只考虑字母和数字字符
- 将字符串反转
- 将去掉特殊符号的字符串和反转之后的字符串比较
- 返回结果
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
res := isPalindrome("A man, a plan, a canal: Panama")
fmt.Println(res)
}
func isPalindrome(s string) bool {
// 定义正则过滤所有无效字符串
reg, err := regexp.Compile("[^a-zA-Z0-9]+")
if err != nil {
panic("正则定义失败")
}
processedStr := reg.ReplaceAllString(s, "")
reversedStr := Reverse(processedStr)
return strings.EqualFold(processedStr, reversedStr)
}
/**
反转字符串,将首端和末端,交换位置
*/
func Reverse(str string) string {
r := []rune(str)
index, j := 0, len(r)-1
for ; index < j; index, j = index+1, j-1 {
r[index], r[j] = r[j], r[index]
}
return string(r)
}
字符串反转
将字符串首端和末端,交换位置即可
- 先将字符串拆分为数组
- 定义首端和末端变量
- 当首端 < 末端时,代表字符串还没全部交换完成
- 每次交换完成,首端 +1 ,末端 -1 ,如此每次交换的都是下一个字符
/**
反转字符串,将首端和末端,交换位置
*/
func Reverse(str string) string {
r := []rune(str)
index, j := 0, len(r)-1
for ; index < j; index, j = index+1, j-1 {
r[index], r[j] = r[j], r[index]
}
return string(r)
}