给定一个字符串,找出其中第一个重复的字符。我们需要找到出现多次且第二次出现的索引最小的字符。这里讨论了这个问题的一个变体。
例子:
Input: ch = “geeksforgeeks”
Output: e
e is the first element that repeats
Input: str = “hello geeks”
Output: l
l is the first element that repeats
简单的解决方案:解决方案是运行两个嵌套循环。从左侧开始遍历。对于每个字符,检查它是否重复。如果字符重复,则增加重复字符的计数。当计数变为 K 时,返回字符。
此解决方案的时间复杂度为 O(n 2 )
我们可以使用排序在 O(n Log n) 时间内解决问题。以下是详细步骤。
- 将给定数组复制到辅助数组 temp[]。
- 使用 O(N log N) 时间排序算法对临时数组进行排序。
- 从左到右扫描输入数组。对于每个元素,使用二进制搜索计算它在 temp[] 中的出现次数。一旦我们发现一个字符出现不止一次,我们就返回这个字符。
这一步可以在 O(N Log N) 时间内完成。
一个有效的解决方案是使用哈希在平均 O(N) 时间内解决这个问题。
- 创建一个空哈希。
- 扫描输入字符串的每个字符并将值插入散列中的每个键。
- 当任何字符出现多次时,哈希键值加1,并返回字符。
下图是上述方法的试运行:
下面是上述方法的实现:
C++
// CPP program to find the first
// repeated character in a string
#include
using namespace std;
// Returns first repeating character in str.
char firstRepeating(string &str)
{
// Creates an empty hashset
unordered_set h;
// Traverse the input array from left to right
for (int i=0; i
Java
// Java program to find the first
// repeated character in a string
import java.util.*;
class Main
{
// This function prints the first repeated
// character in str[]
static char firstRepeating(char str[])
{
// Creates an empty hashset
HashSet h = new HashSet<>();
// Traverse the input array from left to right
for (int i=0; i<=str.length-1; i++)
{
char c = str[i];
// If element is already in hash set, update x
// and then break
if (h.contains(c))
return c;
else // Else add element to hash set
h.add(c);
}
return '\0';
}
// Driver method to test above method
public static void main (String[] args)
{
String str = "geeksforgeeks";
char[] arr = str.toCharArray();
System.out.println(firstRepeating(arr));
}
}
Python
# Python program to find the first
# repeated character in a string
def firstRepeatedChar(str):
h = {} # Create empty hash
# Traverse each characters in string
# in lower case order
for ch in str:
# If character is already present
# in hash, return char
if ch in h:
return ch;
# Add ch to hash
else:
h[ch] = 0
return '\0'
# Driver code
print(firstRepeatedChar("geeksforgeeks"))
C#
// C# program to find the first
// repeated character in a string
using System;
using System.Collections.Generic;
class GFG
{
// This function prints the first
// repeated character in str[]
public static char firstRepeating(char[] str)
{
// Creates an empty hashset
HashSet h = new HashSet();
// Traverse the input array
// from left to right
for (int i = 0; i <= str.Length - 1; i++)
{
char c = str[i];
// If element is already in hash set,
// update x and then break
if (h.Contains(c))
{
return c;
}
else // Else add element to hash set
{
h.Add(c);
}
}
return '\0';
}
// Driver Code
public static void Main(string[] args)
{
string str = "geeksforgeeks";
char[] arr = str.ToCharArray();
Console.WriteLine(firstRepeating(arr));
}
}
// This code is contributed by Shrikant13
PHP
Javascript
输出:
e
类似问题:在字符串查找第一个非重复字符。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。