字符串-找到字符流中第一个不重复的字符(思路和代码实现)

KLQ 2020-04-14 15:56:07 java常见问答 8450

下面要给大家分享的是找出字符流中第一个只出现一次的字符的思路和代码实现,下面,具体的一起来了解一下。

题目:

请实现一个函数用来找出字符流中第一个只出现一次的字符。

例:

当字符流中只读出前两个字符"go"的时候,第一个只出现一次的字符是"g"。

当从这个字符流中读出前六个字符“google"的时候,第一个只出现一次的字符是"l"。

输出描述:

在当前字符流没有存在出现一次的字符,返回#字符。

思路1:

用哈希表

代码实现:

class Solution
{
    public:
        //Insert one char from stringstream
        void Insert(char ch)
        {
            s += ch;
            tab[ch]++;
        }
    //return the first appearence once char in current stringstream
    char FirstAppearingOnce()
    {
        for (int i = 0; i < s.size(); i++)
        {
            if (tab[s[i]] == 1)
                return s[i];
        }
        return '#';
    }
    private:
        string s;
    map < char, int > tab;
};

思路2:(比较清晰的思路)

代码实现:

class Solution
{
    public:
        string s;
    char hash[256] = {
        0
    };
    //Insert one char from stringstream
    void Insert(char ch)
    {
        s += ch;
        hash[ch]++;
    }
    //return the first appearence once char in current stringstream
    char FirstAppearingOnce()
    {
        int size = s.size();
        for (int i = 0; i < size; i++)
        {
            if (hash[s[i]] == 1)
                return s[i];
        }
        return '#';
    }
};

思路3

代码实现:

package String;
import java.util.LinkedHashMap;
import java.util.Map;
/**
 * 字符流中第一个不重复的字符
 * 题目描述
 * 请实现一个函数用来找出字符流中第一个只出现一次的字符。
 * 例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。
 * 当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
 * 输出描述:
 * 如果当前字符流没有存在出现一次的字符,返回#字符。
 * 思路:
 * 使用一个LinkedHashMap来统计字符出现的次数
 */
public class Solution26
{
    Map < Character, Integer > linkedHashMap = new LinkedHashMap < > ();
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        if (linkedHashMap.containsKey(ch))
        {
            linkedHashMap.put(ch, linkedHashMap.get(ch) + 1);
        }
        else
        {
            linkedHashMap.put(ch, 1);
        }
    }
    //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        //遍历map集合,判断出现次数是否为1
        for (Map.Entry < Character, Integer > entry:
            linkedHashMap.entrySet())
        {
            if (entry.getValue() == 1)
            {
                return entry.getKey();
            }
        }
        return '#';
    }
}

找到字符流中第一个不重复的字符的思路和代码实现大家都了解吗?

更多的相关Java实例,可以继续的来本站了解哦!