欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 【算法专题--回文】回文排列 -- 高频面试题(图文详解,小白一看就懂!!)

【算法专题--回文】回文排列 -- 高频面试题(图文详解,小白一看就懂!!)

2025/10/8 17:54:57 来源:https://blog.csdn.net/weixin_45031801/article/details/142096962  浏览:    关键词:【算法专题--回文】回文排列 -- 高频面试题(图文详解,小白一看就懂!!)

目录

一、前言

二、题目描述 

三、预备知识 

🥝 什么回文串 ?

四、题目解析 

五、总结与提炼  

六、共勉  


一、前言

        回文排列 这道题,可以说是--回文专题 和 哈希专题--,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会从多个方面考察这道题目,所以大家需要对这道题目非常熟悉哦!!
       本片博客就来详细的讲讲解一下 回文排列 的实现方法,让我们的面试变的更加顺利!!!

二、题目描述 

题目链接: 面试题 01.04. 回文排列 - 力扣(LeetCode)

三、预备知识 

🥝 什么回文串 ?

回文串 的概念就是正着读和倒着读是一样的字符串,分为以下两种情况 

  • ① 11211  ---- 奇数个
  • ② 112211    ---- 偶数个

不难发现,除了中间的字符外所有的字符均在一首一尾出现了一次,也就是说,出现在两边的字符数量一定是偶数,只有出现在中间的字符数量可以是奇数 

  • 现在,我们把上述①、②回文串拆分成 leftmidright三个部分,如下图 

  • 「回文串」长度为偶数所有不同字符的出现次数都为「偶数」
  • 「回文串」长度为奇数位于中点的字符出现「奇数」次其余字符出现「偶数」次

因此,某字符串是回文串排列之一的「充要条件」为:此字符串中,最多只有一种字符的出现次数为「奇数」其余所有字符的出现次数都为「偶数」。 

四、题目解析 

考虑使用「哈希表」统计给定字符串中各字符的数量,再根据以上规则判断字符串是否为回文串排列之一。

  • 如下图所示,为判断示例字符串 "tactcoa" 是否为回文串排列之一的算法执行流程。 

class Solution {
public:bool canPermutePalindrome(string s) {// 初始化哈希表unordered_map<char, int> dic;// 统计字符串中各字符的数量for (char c : s) {dic[c] += 1;}int odd = 0;for (auto kv : dic) {// 统计“数量为奇数”字符的个数if (kv.second % 2 == 1) {// 若“数量为奇数”的字符个数 > 1 ,则不是回文串排列if (++odd > 1) // 注意 ++odd > 1 是先执行 odd 自增,再执行逻辑判断; odd++ 的顺序反之return false;}}// 若“数量为奇数”的字符个数 <= 1 ,则是回文串排列return true;}
};

五、总结与提炼  

最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关 回文排列 的题目,这道题目是校招笔试面试中有关 回文 和 哈希 章节非常高频的一道题目,大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握 !! 

六、共勉  

以下就是我对 回文排列 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 回文专题 和 哈希专题 的理解,请持续关注我哦!!! 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词