3.1.9

上次更新:2019-04-17
发现了题解错误/代码缺陷/排版问题?请点这里:如何:提交反馈

解答

FrequencyCounter 的官方实现:https://algs4.cs.princeton.edu/31elementary/FrequencyCounter.java.html
《双城记》:https://introcs.cs.princeton.edu/java/data/tale.txt

对 FrequencyCounter 做修改,在调用 Put 方法之前,将单词记录在字符串变量 lastPut 中。
在读入单词结束之后输出 lastPutwords 变量。

将末尾的版权信息删除后,得到的结果如下:

代码

public static string MostFrequentlyWord(string filename, int minLength, IST<string, int> st)
{
    int distinct = 0, words = 0;
    StreamReader sr = new StreamReader(File.OpenRead(filename));

    string[] inputs = 
        sr
        .ReadToEnd()
        .Split(new char[] { ' ', '\r', '\n' }, 
        StringSplitOptions.RemoveEmptyEntries);

    string lastPut = "";
    foreach (string s in inputs)
    {
        if (s.Length < minLength)
            continue;
        words++;
        if (st.Contains(s))
        {
            lastPut = s;
            st.Put(s, st.Get(s) + 1);
        }
        else
        {
            lastPut = s;
            st.Put(s, 1);
            distinct++;
        }
    }

    Console.WriteLine("Last Put: " + lastPut + "\t words count: " + words);

    string max = "";
    st.Put(max, 0);
    foreach (string s in st.Keys())
        if (st.Get(s) > st.Get(max))
            max = s;

    return max;
}

另请参阅

SymbolTable 库

上一题 下一题