广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言算法打卡回文串验证算法题解
  • 539
分享到

C语言算法打卡回文串验证算法题解

2024-04-02 19:04:59 539人浏览 薄情痞子
摘要

目录概念LeetCode例题:1.回文串的验证2.有效回文3.回文排列点杀回文排列点杀回文验证(有效性)对撞指针概念 所谓回文串,就是字符串反转以后和原串相同,如 abba 和 li

概念

所谓回文串,就是字符串反转以后和原串相同,如 abba 和 lippil。对于回文串还是比较容易去验证的,从字符数组的两端开始向中间靠拢去验证字符是否相等,但这里是否需要考虑字符数组长度的奇偶性呢?其实是不用的,下面一起来看看:

Leetcode例题:

1.回文串的验证

2.有效回文

3.回文排列

(1,2题是一样的,合并讲解吧)

点杀回文排列

先讲回文排列吧,简单一点。首先我们的思路要清楚,无非就是找出相同的字符并统计他出现的次数,我们保证每个字符只能出现偶数次,最多允许一个字符出现奇数个(奇数位字符串的中间元素)

代码如下:

char Func(char* s)
{
	int  i, count = 0;
	int a[128] = { 0 };
	int sz = strlen(s);//计算字符数组长度来作为循环判断部分
	for (i = 0; i < sz; i++)
	{
		a[s[i]]++;//统计相同字符出现次数,有点像哈希表
	}
	for (i = 0; i < 128; i++)
	{
		if (a[i] % 2 == 1)//判断出现次数是否为偶数
			count++;
		if (count >= 2)//判断是否最多存在一个出现奇数次的元素
			return false;
	}
	return true;
}

注意,这里面有一些重要细节:

1.数组 s 为 char 类型,字符数组在内存中存储方式是ASCII码值,s[ i ]就是在一一列举其中元素,假如我收到一个 ‘ a ’,a以ASCII码值作为下标++,第二个‘ a ’找到后依然是用相同的ASCII码值作为下标再++;这就是我统计数组中相同元素的次数的原理。

2. 数组初始化 a [128]不能更改是因为ASCII码值一共是128个,0~127。

3.强调最多一位为奇数次出现的字符的特殊情况。

点杀回文验证(有效性)

这道题就是典型的指针对撞题,因为题目告诉考虑数字和字符,我们写的时候就可以不考虑字符的大小写,这种方法需要灵活使用库函数。

需要先判断字符串中的字符是字母或数字,若不是,就pass掉。在 C 语言中可以用 isalnum() 函数去判断。

忽略字母的大小写,所以可以将待比较的字符转化为小写或大写,然后再比较。在 C 语言中可以用 tolower() 和 toupper() 函数。

对撞指针

一根指针指向头,满足条件时,往右移动;一根指针指向尾,满足条件时,往左移动;最后两根指针相遇,循环条件一般是前下标(指针)小于后下标(指针)。

送上代码:

char Fun(char * s)
{
    int left = 0, right = strlen(s) - 1;
    while (left < right) 
    {       //筛选出数字与字符
        if (!isalnum(s[left])) {
            left++; 
        } else if (!isalnum(s[right])) {
            right--;
        } else { //合并为小写(大写)来判断
            if (tolower(s[left]) != tolower(s[right])) {
                return false;
            }            
            left++;
            right--;
        }
    }
    return true;
    }         

今天就到这里了家人们,先摸了。

以上就是C语言算法打卡回文串验证算法题解的详细内容,更多关于C语言回文串算法验证的资料请关注编程网其它相关文章!

--结束END--

本文标题: C语言算法打卡回文串验证算法题解

本文链接: https://www.lsjlt.com/news/139371.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言算法打卡回文串验证算法题解
    目录概念Leetcode例题:1.回文串的验证2.有效回文3.回文排列点杀回文排列点杀回文验证(有效性)对撞指针概念 所谓回文串,就是字符串反转以后和原串相同,如 abba 和 li...
    99+
    2022-11-13
  • C语言回溯法解八皇后问题(八皇后算法)
    八皇后问题(N皇后问题)的回溯法求解 一、问题描述 在一个国际象棋棋盘上放置八个皇后,使得任何两个皇后之间不相互攻击,求出所有的布棋方法,并推广到N皇后情况。 二、参考资料 啥文字都...
    99+
    2022-11-12
  • C语言字符串压缩之ZSTD算法详解
    目录前言一、zstd压缩与解压二、ZSTD压缩与解压性能探索三、zstd的高级用法四、总结前言 最近项目上有大量的字符串数据需要存储到内存,并且需要储存至一定时间,于是自然而然的想到...
    99+
    2022-11-13
    C语言字符串压缩 C语言 ZSTD算法 C语言 ZSTD 字符串压缩
  • C语言数据结构与算法之字符串详解
    目录串的定义串的比较 串的抽象数据类型串的初始化相关定义初始化定长类初始化串的堆式顺序存储结构(Heap)初始化堆字符串 赋值操作比较两个堆字符串的大小 串的定义...
    99+
    2022-11-12
  • C语言堆排序经典算法TopK问题解析
    目录问题描述:快速排序TopK问题描述: 从arr[1, n]这n个数中,找出最大的k个数,这就是经典的TopK问题 什么是TopK,就是找到一个无序队列中的k个最大数。 TopK...
    99+
    2023-05-15
    C语言堆排序TopK算法 TopK算法问题
  • 关于C语言一维数组算法问题详解
    目录问题1:将数组中的数逆序存放问题2:求数组中最大值及其下标问题3:找出不是两个数组的共有元素问题4:找出出现次数最多的数问题5:数组中插入数字并排序问题6:数组循环右移问题总结问...
    99+
    2022-11-12
  • C语言算法中如何解决佩奇借书问题
    小编给大家分享一下C语言算法中如何解决佩奇借书问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 问题描述佩奇有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?2. 题目分析本题...
    99+
    2023-06-29
  • 大数据打包难题解决方案:GO语言+LeetCode算法!
    大数据打包难题解决方案:GO语言 LeetCode算法! 在当今信息时代,数据量的快速增长已经成为了一个不争的事实。无论是企业的数据存储,还是个人的数据备份,都需要面对着海量数据的存储和打包问题。而在这个过程中,如何优化打包速度和存储效率,...
    99+
    2023-10-31
    大数据 打包 leetcode
  • C语言堆排序经典算法TopK问题怎么解决
    本文小编为大家详细介绍“C语言堆排序经典算法TopK问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言堆排序经典算法TopK问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。问题描述:从a...
    99+
    2023-07-05
  • 一篇文章带你了解论C语言中算法的重要性
    目录一、问题一(打印阶乘)问题描述:问题分析:解决方案:1.让我们检查一下结果,发现问题很有可能是循环的时候没有循环本身2.这里要引入C++中STL库的一个知识点二、问题二(比较多项...
    99+
    2022-11-12
  • C语言编程题杨氏矩阵算法快速上手示例详解
    目录题目概要一、解题思路二、具体代码题目概要 有一个数字矩阵,矩阵的每行从左到右都是递增的,矩阵从上到下都是递增的,请编写程序在这样的矩阵中查找某个数字是否存在? 一、解题思路 对于...
    99+
    2022-11-12
  • C语言动态规划点杀dp算法LeetCode炒股习题案例解析
    目录概念性质典型特征实战论证算法实现优化概念 说到动态规划,什么是动态规划? 动态规划(英语:Dynamic programming,简称 dp)通过把原问题分解为相对简单的子问题的...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作