首页 > 其他分享 >力扣---面试题 01.04. 回文排列

力扣---面试题 01.04. 回文排列

时间:2023-03-28 19:23:43浏览次数:43  
标签:力扣 面试题 set 字符 --- map Set 排列 回文

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

回文串不一定是字典当中的单词。

 

示例1:

输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-permutation-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

题目的意思,实际上是说,把一个字符串中的所有字符进行各种排列后,是否会出现一个回文字符。

判断的方法也很简单,根据回文字符的特点,可以很容易就联想到一个回文字符中不同字符的数量最多只有一种是奇数,其他都必定是偶数。

由于题目没有给出字符集,无法判断是否包含其他符号甚至是汉字等。此时可以利用哈希表来解决。

哈希表可以用Map来保存所有字符的数量,最后再遍历即可,优化后可以利用Set,由于我们只需要判断数量是否是偶数,所以可以在Set中含有相同元素时,将Set中的该元素移除。最后判断Set的长度是否小于等于1即可。

Map:

class Solution {
    public boolean canPermutePalindrome(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        // 判断是否包含多个数量为奇数的字符
        boolean ju = false;
        // 只需要value
        for (Integer value : map.values()) {
            if (value % 2 != 0) {
                if (ju) {
                    return false;
                } else {
                    ju = true;
                }
            }
        }
        return true;
    }
}

 

 Set:

class Solution {
    public boolean canPermutePalindrome(String s) {
        Set<Character> set = new HashSet<>();
        for (char c : s.toCharArray()) {
            if (set.contains(c)) {
                // 遇到已经含有后移除,确保set中的字符都是出现次数为奇数的字符。
                set.remove(c);
            } else {
                set.add(c);
            }
        }
        return set.size() <= 1;
    }
}

 

标签:力扣,面试题,set,字符,---,map,Set,排列,回文
From: https://www.cnblogs.com/allWu/p/17266374.html

相关文章

  • os: rockylinux9.1 - 网络配置
    os:rockylinux9.1-网络配置    一、nmcli-网络配置1[root@rockysystem-connections]#pwd2/etc/NetworkManager/system-connections3[root@rocky......
  • 11-5
    使用I/O流以文本方式打开上题建立的文件test1.txt,在次此文件后面添加字符“已成功添加字符!”,然后读出整个文件的内容显示出来,看看是否正确。1#include<iostream>2#......
  • Python-开始学习python
    为了之后服务外包杯团队合作项目,我今天开始学习python.首先要安装开发环境和编译器一个在python官网下载https://www.python.org/在cmd中输入python测试安装是否成功......
  • 浅谈分布式事务-Seata
    传统的单机事务。在传统数据库事务中,必须要满足四个原则(ACID):ACID:Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)原子性(Atomicity)一个事务(transact......
  • go语言学习-slect多路复用和锁
    select在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。Go内置了select关键字,可以同时响应多个通道的操作。select的使用......
  • High availability · AzureAD/microsoft-authentication-library-for-dotnet Wiki ·
    Highavailability·AzureAD/microsoft-authentication-library-for-dotnetWiki·GitHubPro-activetokenrenewalToimproveavailabilityMSALtriestoensuret......
  • 29-Celery基本配置
    #Celery是一个基于python开发的异步任务队列/基于分布式消息传递的作业队列,通过它可以很轻松的实现任务的异步处理#官方网站:https://docs.jinkan.org/docs/cele......
  • Maven - 项目构建
    一、概念1.Maven本质是一个软件项目管理和理解工具,基于POM概念,可以从一条中心信息管理项目的构建、报告和文档。 2.POM 项目对象模型,每个Maven工程都有一个pom.xm......
  • MySQL学习笔记-存储引擎
    存储引擎一.MySQL体系结构MySQLServer连接层:连接的处理、认证授权、安全方案、检查是否超过最大连接数等。服务层:SQL接口、解析器、查询优化器、缓存引擎层:引擎......
  • Unity Shader案例04-------透明
    Shader"CLF/SetTransparent"{Properties{_Diffuse("Diffuse",Color)=(1,1,1,1)//漫反射_MainTex("MainTex",2D)="white"{}//2......