📌  相关文章
📜  查找字符串第一个重复的字符

📅  最后修改于: 2021-10-27 08:59:26             🧑  作者: Mango

给定一个字符串,找出其中第一个重复的字符。我们需要找到出现多次且第二次出现的索引最小的字符。这里讨论了这个问题的一个变体。

查找字符串中第一个重复的字符

例子:

简单的解决方案:解决方案是运行两个嵌套循环。从左侧开始遍历。对于每个字符,检查它是否重复。如果字符重复,则增加重复字符的计数。当计数变为 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 现场工作专业课程学生竞争性编程现场课程