H面试程序(26):判断字符串是否定回文字符串

(字符串)回文串 (字符串)回文串 题目描述 读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。 输入 一行字符串,长度不超过255。 输出 如果是回文串,输出“YES”,否则输出“NO”。 样例输入 12321 样例输出 YES /*回文串 思路:1.设置一个字符数组str用来存储字符串,str的长度为len; 2.回文字符串具有对称性,故只需扫描一半,判断str[i]是否等于str[n-1 阅读详情


所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的。比如"level" 、 “aaabbaaa”


题目:判断一个字符串是否为回文

解法:两端扫描


#include <stdio.h>
#include <assert.h>
int huiwen( int high, int low , char * a)   //从两边扫描, num是一个中点位置
{ 
   assert(a);
   int i = 0; 
   int num = high /2;
   while (i <= num )
   {
	   if ( a[low] != a[high] )  //只要对称位置不相等就返回0;
	   {
		   return 0;
	   }
	   high--;
	   low++;
	   i++;
   }
   return 1;  //说明说有位置都相等,包括单字母的
}

int main( )
{
	char StrA[] = "ab";
	int stringlen = sizeof StrA / sizeof(char) - 1;  //字符串的长度
	
	
    int result = huiwen(stringlen-1 , 0, StrA ); 
	if (result)                       
	{
		printf("Yes! it is");
	}
	else
	{
      printf("No,Isn't it");
	}
	return 0;
}

网上的答案:

解法:递归


递归的作用在于把问题的规模不断缩少,直到问题缩少到能简单地解决

问:如何缩少问题规模?

答:通过观察可以知道,一个回文字符串其中内部也是回文。所以,我们只需要以去掉两端的字符的形式一层层检查,每一次的检查都去掉了两个字符,这样就达到了缩少问题规模的目的。


新问题与原问题有着相同的形式

当去掉两端字符后的字符串,其产生的新问题同样是检查这个字符串是否回文。


递归的结束需要简单情景

1. 字符串长度可能会奇数或偶数:

  • 如果字符串长度是奇数,字符串会剩下最中间那位字符,但其不影响回文。当检查到长度为1的时候即代表此字符串是回文
  • 如果字符串长度是偶数,当两端的字符串两两比较检查后不会剩下字符。即检查到长度为0的时候即代表此字符串是回文

2. 如果检查到两端两个字符不相同。则说明此字符串不是回文,直接返回0,不需要继续检查


递归跳跃的信任

此题的递归分解比较简单,所以对在递归过程中细节的实现,我们可以直接看出。但是一些较复杂的题目上,我们就没那么容易看出过程中细节的实现,这时候就需要我们递归跳跃的信任!


#include <iostream>
using namespace std;
int fun(int low, int high, char *str, int length)
{
	if (length == 0 || length == 1)
		return    1;
	if (str[low] != str[high])
		return    0;
	return fun(low+1, high-1, str, length-2);
}
int main()
{
	char    str[]="aaabdaaa";
	int     length = strlen(str);
	//返回1代表是, 0代表不是
	cout << fun(0, length-1, str, length) << endl;
	return    0;
}


C语言-判断输入字符串是否为回文串 C语言-判断输入字符串是否为回文串 通过定义一个s字符数组,gets函数控制输入 i、j双指针来回判断字符数组的位置,和对应位置的值的比较, while循环的条件 i<=j&&s[i]==s[j] 最终判断i、j的关系,如果i<=j说明存在对应位置不等的情况就是不是回文串 #include <stdio.h> #include <stri... 阅读详情

相关推荐

字符串哈希核心原理与实战:从Rabin-Karp算法到工程优化

哈希函数是计算机科学中一种将任意长度数据映射为固定长度摘要的核心技术,其核心原理是通过特定算法(如多项式滚动哈希)生成数据的“指纹”。这种技术通过牺牲极小的冲突概率,换取了O(1)时间复杂度的等值比较能力,在算法设计与工程实践中具有极高的技术价值。它广泛应用于字符串快速匹配、海量数据去重、内容指纹生成等场景,是构建高效搜索引擎、数据库索引和大规模文本处理系统的基石。本文深入剖析了字符串哈希的实现细节,包括如何通过前缀哈希和双哈希策略优化性能与可靠性,并结合Rabin-Karp算法等高频搜索关键词,展示了其在

weixin_34236869的博客 524

回文字符串(Palindromic_String)

一、基本概念 回文字符串:是一个正读和反读都一样的字符串。 二、问题与算法 (1)判断 思想: 1、初始化标志flag=true; 2、输入字符串str,并获取其长度len; 3、定义并初始化游标i=0,j=len-1,分别指向字符串开头和末尾; 4、比较字符str[i]和str[j],若i==j,转至7,否则往下执行5; 5、若str[i]和str[j]相等...

无限迭代中...... 7万+

数据结构与算法代码实战讲解之:回文串算法

作者:禅与计算机程序设计艺术 1.背景介绍 回文字符串(英语:palindrome)是一个指从左往右读和从右往左读都是一样的字符序列,例如:"racecar", "civic", "deified".等等,在古代用来记载文字,用于广泛的考试

AI天才研究院 1178

回文字符串

回文字符串的做题技巧

wh22141334的博客 7695

基于人脸识别的课堂考勤系统 tkinter+openpyxl+face_recognition

基于face_recognition库实现人脸考勤系统功能。利用Python的tkinter模块来设计考勤系统的图形化界面,此外结合openpyxl模块,实现将学生的信息和考勤打卡数据保存到表格中,方便查看和调用。该系统具备“刷脸打卡”、“新学生注册”等功能。............

lyx4949的博客 6968

告别数据丢失焦虑:用Python手把手实现Reed-Solomon码(附完整代码)

本文详细介绍了如何使用Python实现Reed-Solomon纠错码(RS码),帮助开发者有效防止数据丢失。通过基础编解码实战、文件保护方案和高级性能优化技巧,读者可以轻松掌握这一前向纠错技术,应用于物联网、文件存储和网络传输等场景,提升数据可靠性。

weixin_42527160的博客 224

go语言快速刷《程序员面试金典》(1)

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 一个数组统计是否有 func isUnique(astr string) bool { var arr[26] int; for _,ch:=range astr{ num:=ch-'a' if(arr[num]==1){ return false } arr[num]++ } return true } 给定两个字符串

少说,多做。 1万+

Android应用加固脱壳实战:从爱加密原理到Frida内存Dump与修复

在移动应用安全领域,代码加固与动态加载是保护核心逻辑的关键技术。其原理在于通过修改应用启动流程,将原始DEX加密隐藏,并注入包含解密逻辑的壳DEX,实现运行时动态加载。这项技术的核心价值在于防止应用被逆向分析、二次打包或恶意篡改,广泛应用于金融、游戏等高安全要求场景。对于安全研究、漏洞挖掘或历史版本审计,掌握脱壳技能至关重要。本文聚焦于**爱加密**等主流加固方案,深入探讨如何利用**Frida**框架在内存中精准捕获解密后的DEX数据,并解决脱壳后常见的签名校验等运行问题,提供一套从原理到实践的完整攻防思

weixin_28716443的博客 490

程序员面试金典(第 6 版)(简单篇)

程序员面试金典(第 6 版)(简单篇)

qq_39493185的博客 1946

树莓派视觉小车实战:OpenCV驱动的智能物体追踪系统

本文详细介绍了如何从零开始构建一个基于树莓派的智能视觉小车,实现物体跟踪功能。通过OpenCV进行图像处理,结合颜色与轮廓识别算法,让小车能够实时锁定并追踪特定目标。内容涵盖硬件搭建、软件环境配置、核心代码解析及运动控制逻辑,为创客和开发者提供了完整的实战指南。

weixin_29047545的博客 144

docker-compose Install OrangeHRM

OrangeHRM是一个全面的人力资源管理HRM) 系统,它包含任何企业所需的所有基本功能。OrangeHRM旨在支持任何规模的团队,包括初创企业、中小企业以及大型跨国组织。

极致,细节 1006

程序员面试金典(第 6 版)

程序员面试金典(第 6 版) 力扣 (LeetCode)

[ 25'h ] 1587

【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能

在探讨计算机性能优化的旅程中,我们常常被引导去关注算法的复杂度、代码的优化,或是更高效的数据结构。然而,有一个经常被忽视的角色在幕后默默地影响着程序的运行效率——那就是缓存(Cache)。正如哲学家亨利·戴维·梭罗在《瓦尔登湖》中所说:“细节是造成美丽的源泉”,在软件开发的世界里,对缓存的理解和优化,就是那些决定程序性能优雅与否的细节。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 3736

Java基础26:String字符串常用函数

前言:不管是技术面试还是日常工作中,都会经常遇到字符串处理算法,比如最长公共序列、最长公共子串和最长回文子串就属于字符串处理的常见操作。我们除了要掌握相关的动态规划算法,还得熟悉常用的Java字符串处理方法。 1、获取 int length() : 返回此字符串的长度,也就是字符串中的包含的字符数。 char charAt(int index): 返回指定索引处的char值 int indexOf(int ch):返回的是ch在字符串中第一次出现的索引位置 int indexOf(int ch.

何哥的博客 1318

OSCP-Challenge 2 - Relia

使用andrea:PasswordPassword_6登录远程桌面,在c盘根目录下发现一个计划任务的ps,文件,修改执行的exe位木马,获取到milana用户的反弹shell。,发现开放了一个8000端口,但是我们外部是访问不到的,它对应的页面是/var/www/internal/,这个目录下的文件我们是可以访问的,把这个文件打个包放到本地分析下。其中数据的可以直接连接mssql,但是端口是49965,不过在数据库中没发现什么可用的信息,但是可以修改密码直接进后台,这个可以先放放。

羽的博客 7776

项目经理必看:如何建立高效的相关方沟通机制?

你是否遇到过这样的场景?客户突然说“这不是我要的”,开发团队抱怨“需求总变”,高层追问“进度滞后为什么不早说”?这些问题的根源往往是——相关方沟通机制失效。本文聚焦“如何建立高效沟通机制”,覆盖从识别相关方到持续优化的全流程,适用于IT、产品、工程等各类项目。本文将按“理解问题→拆解核心概念→掌握工具方法→实战落地→未来趋势”的逻辑展开,重点讲解“相关方分析矩阵”“沟通计划表”等实用工具,并用“组织生日派对”的案例贯穿全文,让抽象概念变得可感知。相关方识别:用“权力/利益矩阵”找对人(像派对邀请关键客人)

项目管理的博客 1295

程序员面试金典 1~5

【代码】程序员面试金典 1~5。

Lenyiin的博客 143

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Python 百练成钢】时间调整、二进制数、回文素数、字母距离

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

m0_61549674的博客 1023

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python面试题之手写代码(3)

1、将一整数逆序后放入一数组中(要求递归实现)     void convert(int *result, int n) { if(n&gt;=10) convert(result+1, n/10); *result = n%10; } int main(int argc, char* argv[]) { int n = ...

weixin_41931602的博客 792

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

不过如此,字节跳动的秋招面试也只有这种难度,本人已成功入职!

写在前面的话 作为Java程序员,应该学习怎样的技术?去招聘网站上随便一搜,看看岗位要求就能够十分清楚了,自己具备怎样的技术和能力,就会影响自己的工作环境和社会地位。所以,多学一些大厂技术是百里无一害的。 话不多说,直接上面经! 字节跳动31面 7.15 50min 怎么理解微服务 微服务的缺点 微服务之间怎么做负载均衡 Oauth2基本流程、原理 登录模块是怎么做的 cookie和session的区别 购物车为什么用Redis存,是永久存储吗 为什么购物车多读多写 Redis怎样清除过期key,有哪些策

weixin_53170684的博客 1098

python-面试题2

# 11.给两个数a,b计算他们发分别是那两个数的最小公倍数和最大公约数,输出这两个数,小的在前,大的在后,多组解输出它们之和最小的那组 def task11(num_list: list): a = max(num_list) # a 最小公倍数 b = min(num_list) # b 最大公约数 # 思路; 两数的最小公倍数就是两数的乘积除以他们的最大公约数 即:(x * y)/ b = a ==> a*b = x * y # a,b的积知道,剩下的就是因

噜啦噜啦嘞的博客 498

(转载)算法面试题

1.比较两个字符串如果不等返回True? 答案: Java代码 package com.test.kaoshi; public class StringDemo { private static String a = "abc"; private static String b = "abcg"; ...

weixin_33877885的博客 245

2021备战金三银四血拼一波算法:字节+百度,java编程教程视频

======== 一面问了项目,算法题:一个数组里只有0和1,把0换到1前面,不能使用统计次数的方法。扩展:如果有0,1,2三个数咋办? 二面项目,算法题:无向图的迪杰斯特拉算法实现。 算法血拼:<程序员代码面试指南-IT名企算法与数据结构题目最优解><算法刷题LeetCode><算法-第4版> ======================================================= [算法血拼相关的算法刷题与笔记]等早已整理存放在一个

m0_61364397的博客 998

c++面试宝典(4)

103.编写一unix程序,防止僵尸进程的出现. 同学的4道面试题,应聘的职位是搜索引擎工程师,后两道超级难,(希望大家多给一些算发) 1.给两个数组和他们的大小,还有一动态开辟的内存,求交集,把交集放到动态内存dongtai,并且返回交集个数 long jiaoji(long* a[],long b[],long* alength,long blength,long* dongtai[])

xinpo66的专栏 1394

题解 | #求int型正整数在内存中存储时1的个数#

2.数据库的三大范式(人晕了,太久没看了忘完了);

华鑫的专栏 1021
上一篇: 指针函数与函数指针的区别
下一篇: H面试程序3:去除字符串中多余的空格
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值