go语言检测字符串是否是回文

输入的字符串分为三种情况:

本身就是回文字符串,如:aba、bddb、vvvvv和vvvv等。
本身不是回文字符串,但是可以通过删除一个字符成为回文字符串,如:abca、deeee、eddze和aydmda等。
本身不是回文字符串,不能通过仅删除一个字符成为回文字符串,如:abc、cdef等。
首先使用一个while循环可以对第1.种情况进行初筛。aba型,i和j指针将会相等;bddb型i指针将会超越j指针一位。这种情况erase_num始终为0,因此不会进入删除字符环节,直接返回true。

        while (i < j) {
            // 本身就是回文串的情况,在这个while循环结束后,直接返回true
            if (s[i] != s[j]) {
                erase_num++;        // 检测到字符不等,说明需要进行删除操作,操作数自加1
                break;                // 同时跳出while循环,进行下一步删除操作
            }
            i++;
            j--;
        }

需要删除字符的字符串将会进入删除步骤,删除又将分两种情况,是删除i指针所在的位置还是j指针所在的位置呢?

事实是这两种情况都要进行一次,最后通过erase_num来判断结果,不能只通过当前指针下一位或者上一位与另一个指针所指的字符是否相等来判断,因为会出现以下情况:
————————————————
版权声明:本文为CSDN博主「菠萝开方」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40838478/article/details/117979613

一种新的回文检测算法:

package main

import "fmt"

func main() {
	var str string = "aba"
	res := []rune(str)

	var len = len(res)
	var halfLen = len / 2

	var i int
	for i = 0; i < halfLen; i++ {
		if res[i] != res[len-i-1] {
			break
		}
	}

	if i == halfLen {
		fmt.Println(res, "是回文")
	} else {
		fmt.Println(res, "不是回文")
	}

}

只要理解了回文是互补的,这个问题就很好解决了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值