String with Maximum Number of Unique Characters in Java

2025 年 5 月 10 日 | 阅读 7 分钟

查找字符串列表 Str 中的最大字符串。具有最多不同字符的字符串是最大的。

示例 1

输入

String str[] = {"AN KOW", "LO JO", "ZEW DO RO"}

输出

具有最多唯一字符的字符串是“ZEW DO RO”。

解释

"AN KOW" 的唯一字符是:{A, N, K, O, W}。因此,唯一字符的总数为 5

"LO JO" 的唯一字符是:{L, O, J}。因此,唯一字符的总数为 3

"ZEW DO RO" 的唯一字符是:{Z, E, W, D, O, R}。因此,唯一字符的总数为 6

因此,“ZEW DO RO”具有最多唯一字符的字符串。

示例 2

输入

String str[] = {"JAVA", "PYTHON", "JAVASCRIPT"}

输出

具有最多唯一字符的字符串是“JAVASCRIPT”。

解释

"JAVA" 的唯一字符是:{J, A, V}。因此,唯一字符的总数为 3

"PYTHON" 的唯一字符是:{P, Y, T, H, O, N}。因此,唯一字符的总数为 6

"JAVASCRIPT" 的唯一字符是:{J, A, V, S, C, R, I, P, T}。因此,唯一字符的总数为 9

因此,“JAVASCRIPT”具有最多不同字母的字符串。

示例 3

输入

String str[] = {"111", "2222", "333"}

输出

具有最多唯一字符的字符串是“111”。

解释

"111" 的唯一字符是:{1}。因此,唯一字符的总数为 1

"2222" 的唯一字符是:{2}。因此,唯一字符的总数为 1

"333" 的唯一字符是:{3}。因此,唯一字符的总数为 1

由于每个字符串中的唯一字符数相同,因此选择了第一个字符串“111”。

朴素方法

算法

步骤 1:初始化变量 max 和 res,其中 max 用于跟踪迄今为止已识别出的最多不同字符,res 用于保存具有最多唯一字符的字符串。

步骤 2:创建一个大小为 26 的布尔数组,用于跟踪当前字符串是否包含 A 到 Z 的任何字符。

步骤 3:设置一个计数器来跟踪不同字符的数量。

步骤 4:对于 字符串 中的每个字符,应执行以下操作。

步骤 4.1:如果字符不是空格且之前未出现过,则将唯一字符计数器设置为一并记录。

步骤 5:如果当前字符串具有比 max 更多的唯一字符,则使用当前字符串更新 max 和 res。

步骤 6:打印 res 中保存的具有最多唯一字符的字符串。

实施

输出

 
The maximum unique characters are: JAVASCRIPT  

复杂度分析

上述代码的时间复杂度为 O(n * m),其中 m 是平均字符串长度,n 是输入向量中的字符串数量。空间复杂度为 O(m),因为最长字符串的长度将是用于存储唯一字符的集合的最大大小。

方法:使用优先队列

代码的复杂性取决于其如何有效地使用 数据结构 和算法来识别具有最多唯一字符的字符串。利用自定义比较器和 PriorityQueue,根据唯一字符数维护一个最大堆。它确保了具有最高独特性水平的字符串能够被高效检索。通过在恒定时间内跟踪字符频率,HashMap 使得每个字符串的唯一字符计算能够在线性时间内完成。AbstractMap.SimpleEntry 通过匹配独特性计数和匹配字符串来保持明显的关联。该算法有条不紊地处理输入字符串,分析其不同字符计数,并通过优先考虑计算效率来以最小的时间复杂度检索预期结果。

算法

步骤 1:创建一个优先队列 (pq) 来记录包含最多唯一字符的字符串。

步骤 2:逐个遍历 input stringList 中的每个字符串。

步骤 3:对于每个字符串,设置一个名为 uniquecnt 的变量来记录字符串中唯一字符的数量,并设置一个名为 count 的 map 来记录字符串中每个字符的计数。

步骤 4:逐个遍历字符串中的每个字符。如果字符不是空格,则在 count map 中增加相应键的计数。如果字符计数为 1,则增加 uniquecnt。

步骤 5:使用当前字符串及其 uniquecnt 值更新优先队列 pq。

步骤 6:在遍历完 stringList 中的所有字符串后,返回 pq 顶部元素中的第二个元素(即字符串)。

步骤 7:使用当前字符串及其 uniquecnt 值更新优先队列 pq。

步骤 8:在遍历完 stringList 中的所有字符串后,返回 pq 顶部元素中的第二个元素(即字符串)。

实施

输出

 
The maximum unique characters are: JAVASCRIPT   

复杂度分析

时间复杂度为 O(n * m * log k),其中 k 是优先队列的大小,n 是 stringList 中的字符串数量,m 是 stringList 中字符串的最大长度。空间复杂度为 O(n * m),其中 m 是 stringList 中字符串的最大长度,n 是 stringList 中的字符串数量。

方法:使用 Set 数据结构

该代码使用 HashSet 数据结构,该结构具有内置的能力来有效地存储唯一项,以有条不紊地查找具有最多不同字符的字符串。在遍历字符串数组的过程中,每个字符(空格除外)都被提取并添加到 HashSet 中。由于 HashSet 的特殊存储技术,重复的字符会被自动丢弃。在处理完每个字符串后,代码通过检查集合的大小来计算唯一字符的数量。其结果是与最大大小相对应的字符串。通过仅一次遍历每个字符串,此方法有效地捕获了唯一性计算和比较。

算法

步骤 1:初始化 变量 max 和 res,其中 max 用于跟踪迄今为止已识别出的最多不同字符,res 用于保存具有最多唯一字符的字符串。

步骤 2:对于 str[] 中的每个字符串,执行以下步骤。

步骤 3:创建一个空的哈希集来存储唯一字符。

步骤 4:在遍历字符串时,将不是空格的每个字符添加到 HashSet。

步骤 5:通过计算集合的大小来确定唯一字符的数量。

步骤 6:如果计数大于 max,则更新 max 并将 res 设置为当前字符串。

步骤 7:返回具有最多唯一字符的字符串 res。

实施

输出

 
The maximum unique characters are: JAVASCRIPT   

复杂度分析

时间复杂度为 O(n * m),其中 m 是平均字符串长度,n 是输入向量中的字符串数量。空间复杂度为 O(m),因为最长字符串的长度将是用于存储唯一字符的集合的最大大小。


下一个主题Java EE 与 Node.js