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

2023-10-31

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

本身就是回文字符串,如: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, "不是回文")
	}

}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go语言检测字符串是否是回文 的相关文章

随机推荐

  • word2010或以上版本编号变成黑块的正确处理方

    打开编号显示为黑块的文档 把光标放置在黑块的后面 然后在键盘上按左方向键 则黑块变灰色 为选中状态 2 然后按下ctrl shift s 出现应用样式窗口点击 重新应用 黑块显示成正常的编号 3 然后点击 多级列表 按钮 选择 定义新的多级
  • 一次数据库的选型,FireBird胜出

    做了n多年的J2EE应用以后 如何做客户端的BI确实让我一下子摸不到门路 近期的一个客户要求我们给他做基于客户端的BI分析 客户是对外提供重要数据的单位 有很多的客户每年购买他的数据 可以说人家的数据库 每行每列都是钱 在这种情况下 他们非
  • css实现文字环绕图片布局

    前言 css实现文字环绕图片的效果 实现效果 实现代码 通过图片属性 align div style width 400px img src d303 paixin com thumbs 3548553 231637502 staff 10
  • 数据结构——AVL树

    目录 1 什么是AVL树 2 AVL树插入的模拟实现 节点定义 插入 旋转 右单旋 左单旋 双旋 右左旋 双旋 左右旋 完整的插入代码 3 AVL树的性能分析 1 什么是AVL树 AVL树是一种自平衡二叉查找树 也被称为高度平衡树 它具有以
  • 小福利,数据可视化之常见图形的绘制

    大家好 我是天空之城 今天带来小福利 数据可视化之常见图形的绘制 读取 本 专 科 群体的数据 college student data pd read csv 工作 college student data csv encoding ut
  • opencv提取图像中的颜色直方图(RGB、HSV)

    本篇博客主要介绍利用opencv工具提取一幅图像中的颜色直方图特征 所谓颜色直方图 指的是一幅图像中的颜色分布 与图像中的特定的物体无关 只是用来表示人的眼睛观察到的图像中的颜色分布情况 例如说 一幅图中红色占了多少比例 绿色占了多少比例等
  • 模型旋转 触摸屏 手指滑动360度旋转 安卓版本 EasyTouch

    using UnityEngine using System Collections using System Collections Generic using DG Tweening using UnityEngine EventSys
  • 4.2.3 积分法(二)——分部积分法

    emmmm想想词 算了想不出来 既然不定积分和导数是反操作 那就从导数开始说吧 先看一个导数公式 就不解释变形过程了 上图其实就是分部积分法的计算过程 总之是分成两个步骤 先分部再积分 至于 C等到完全积分积出来之后再加 目前我们总结过的不
  • 深入 Python 3

    深入 Python 3 http dipyzh bitbucket org table of contents html xml 目录 深入 Python 3 中有何新内容 又名 负号层 安装 Python 深入 哪个版本的 Python
  • ajax前后端交互示例

    文章目录 一 前后端交互方法 1 Ajax前端示例 1 1 特点 1 2 ajax同域请求示例 1 3 ajax跨域请求示例 2 后端示例 2 1 controller层处理 一 前后端交互方法 1 Ajax前端示例 1 1 特点 Ajax
  • leetcode92 反转链表II

    题目 给你单链表的头指针 head 和两个整数 left 和 right 其中 left lt right 请你反转从位置 left 到位置 right 的链表节点 返回 反转后的链表 示例 输入 head 1 2 3 4 5 left 2
  • css动画(四)

    推荐动画四 html代码上传 div class night div class shooting star div div class shooting star div div class shooting star div div c
  • Swagger整体整理一下蛤

    最近在学习springboot时候发现好多开源的项目里面都提到了swagger 原来是一个前后端分离开发过程中为了防止两只团队为了需求更改打架 毕竟前端需要加一个参数 后端就要改好多好多 多的不说 直接上货 1 导入依赖 首先是导入依赖 既
  • Unity的Application.Quit()方法使用失效的其他解决方案。

    1 android手机上 使用方法 Application Quit 之后 游戏的进程还在 解决方法编写java代码 打成jar包或aar放到Assets Plugins Android libs下 public void KillProc
  • 全球互联网未来发展九大趋势

    当今世界网络信息技术日新月异 互联网正在全面融入经济社会生产和生活各个领域 引领了社会生产新变革 创造了人类生活新空间 带来了国家治理新挑战 并深刻地改变着全球产业 经济 利益 安全等格局 互联网正在成为21世纪影响和加速人类历史发展进程的
  • STL模板(一)向量、栈和队列

    一 vector 向量 1 定义 向量类型可以容纳许多类型的数据 被称为容器 可以当数组使用 可以随时增加或减少元素 内存连续 顺序表 2 头文件 include
  • unity, Animation crossfade需要两动画在时间上确实有交叠

    unity现在播动画都用Animator了 但公司的老项用的还是Animation 今天遇到一个bug 是两个动画的衔接处不连贯 最后发现是由于A动画已经播完之后B动画才开始播 而且还用了crossfade 0 2 正确的用法是在A动画还差
  • layui框架学习(30:树形模块)

    Layui中的树形组件模块tree用于以树形形式显示上下级结构的数据 类似于winform中的tree控件 tree模块的基本用法及显示效果如下所示 div div br
  • 2020年高教社杯全国大学生数学建模竞赛C题 第二问详细解答+代码

    2020年高教社杯全国大学生数学建模竞赛C题 第二问详细解答 代码 本文摘自小编自己的参赛论文与经历 小编获得了2020年高教社杯国奖 有问题的同学们可私聊博主哦 问题2 缺少信誉评级后的 信贷策略 研究 1 1 问题分析 问题二与问题一的
  • go语言检测字符串是否是回文

    输入的字符串分为三种情况 本身就是回文字符串 如 aba bddb vvvvv和vvvv等 本身不是回文字符串 但是可以通过删除一个字符成为回文字符串 如 abca deeee eddze和aydmda等 本身不是回文字符串 不能通过仅删除