Java 计数字符串匹配数给出错误结果

Java 计数字符串匹配数给出错误结果,java,string,count,string-matching,Java,String,Count,String Matching,我想计算列表中的字符串匹配数: 我的ArrayList包含: recognise product product process process process principle partner particular 因此,输出应为: recognise 1 product 2 process 3 principle 1 partner 1 particular 1 我的代码是: List<String> mylist=new LinkedList<String>(

我想计算列表中的字符串匹配数: 我的ArrayList包含:

recognise
product
product
process
process
process
principle
partner
particular
因此,输出应为:

recognise 1
product 2
process 3
principle 1
partner 1
particular 1
我的代码是:

List<String> mylist=new LinkedList<String>();
HashMap<String, Integer> result= new LinkedHashMap<String, Integer>();

        for (int i = 0; i < wordlist.size(); i++) {
            mylist.add(wordlist.get(i));   //wordlist contains the above mentioned items
        }
        Collections.sort(mylist);
        Collections.reverse(mylist);

String small="";
int c=0;

for(int i=0;i<mylist.size();i++)
{
    c+=1;
    small=mylist.get(i);
    for(int j=i;j<mylist.size();j++)
    {
        if(small.contains(mylist.get(j)))
            {
                small=mylist.get(j);

            }
    }
    if (!result.containsKey(small) || result.get(small) < c){
        result.put(small, c);
        c=0;
    }


}
for (String key : result.keySet()){
    System.out.println(key + ": " + result.get(key)); 
}

如果您只想计算列表中每个字符串的出现次数,那么这就足够了:

for(String s : mylist) {
    if(result.containsKey(s)) {
        result.put(s, result.get(s) + 1);
    } else {
        result.put(s, 1);
    }
}
无需对我的列表进行排序/反转/etc


要对计数进行排序,只需通过提供一个比较器使用a即可。我在这方面没有经验,因此您最好自己查找API。

在^2*length\u max上,您的算法的时间复杂度似乎很高。 但是,您可以在ON中执行此操作,其中N=通过, 其中,每个节点包含一个整数i,该整数表示字符串在该节点结束的次数,以及char ch

算法: 当遍历字符串时,如果它不在trie中,则将其插入trie中,否则向下遍历trie,当字符串结束时,do i=i+1,在此处标记另一个字符串结束


请参阅:

请求帮助时,请花时间将代码格式化/缩进,使其易于阅读。
struct node 
{
    int i;  
    char ch;
}