`
128kj
  • 浏览: 604167 次
  • 来自: ...
社区版块
存档分类
最新评论

使用字典树和Hashtable两种方法解POJ 2503(JAVA)

阅读更多
poj2503题意:
   给出一个最多有100000对单词的英语和外语的字典,然后给你一个外语单词 要求你查字典翻译成英语,如果词典里查不到就输出eh。
样例:

Sample Input

dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
ittenkay
oopslay


Sample Output

cat
eh
loops


解法一:使用jdk中的Hashtable(或HashMap)
 import java.util.Scanner;
import java.util.Hashtable;

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        Hashtable< String,String> table = new Hashtable< String, String>();
        String input;
        String [] array=new String[2];
        while(in.hasNext()){
            input=in.nextLine();
            if(input.length()==0)break;
            array=input.split(" ");
            table.put(array[1],array[0]);
        }
        while(in.hasNext()){
           input=in.nextLine();
         if(table.get(input)!=null) System.out.println(table.get(input));
         else System.out.println("eh");
        }
    }
}



方法二:使用字典树
思路:用所有的外语单词去建一棵字典树,然后向这棵字典树中查找给出的单词
import java.util.Scanner;
import java.text.DecimalFormat; 

class Trie{ //字典树
    Trie next[] = new Trie[26];//所有儿子节点
    String  enWord;// 用于记录对应的英语单词  
    public Trie(){
        enWord=null;
    }
} 
 
public class Main{ 
    Trie root = new Trie();
     
     void solve() {
        Scanner  in = new Scanner(System.in);
        String input;
        String [] array=new String[2];
        while(in.hasNext()){//用所有外文字符串,构造字典树
            input = in.nextLine();
            if(input.length()==0) break;
            array=input.split(" ");
            insert(array[1],array[0]);
        }
         while(in.hasNext()){
           input=in.nextLine();
           System.out.println(search(input));
        }
    }

    //建立字典树
    public void insert(String str,String enWord) {  //将一个外文字符串插入字典树
        if (str == null || str.length() == 0) {  
            return ;
        }  
        Trie node = root;  
        char[] letters=str.toCharArray();  
        for (int i = 0; i < str.length(); i++) {  
            int pos = letters[i] - 'a';  
            if (node.next[pos] == null) {  
                node.next[pos] = new Trie();  
                //node.son[pos].val = letters[i];  
            } 
            node = node.next[pos];  
        }  
       //外文字符串的最后一个节点,根节点到此节点构成了一个外文单词,此单词对应的英文单词为enWord;
        node.enWord = enWord;  
    }  

      
     // 在字典树中查找一个完全匹配的外文单词,返回其对应的英文单词.  
    public String search(String str) {  
        if (str == null || str.length() == 0) {  
            return null;  
        }  
        Trie node = root;  
        char[] letters=str.toCharArray();  
        for (int i = 0, len = str.length(); i < len; i++) {  
            int pos = letters[i] - 'a';  
            if (node.next[pos] != null) {  
                node = node.next[pos];  
            } else {  
                return "eh";  
            }  
        }  
        return node.enWord;  
    }  

    
    public static void main(String[] args) {
        Main test = new Main();
         test.solve();
    }
}



0
0
分享到:
评论

相关推荐

    HashTable的java实现

    在Java编程语言中,哈希表(HashTable)是一种常见的数据结构,它提供了高效的数据存储和检索功能。哈希表基于哈希函数将键(Key)映射到数组的索引位置,通过键值对(Key-Value Pair)来存储数据。这种数据结构允许...

    dotnet C# 字典 Dictionary 和 Hashtable 的性能对比.rar

    对于Java开发者,虽然Java也有`Hashtable`类,但自Java 1.5以来,`java.util.HashMap`成为了更常用的选择,因为它同样提供了更好的性能和类型安全性。 总的来说,理解`Dictionary, TValue&gt;`和`Hashtable`之间的差异...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Java集合专题总结:HashMap和HashTable源码学习和面试总结 本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素...

    HashMap和HashTable的区别和不同

    在Java编程中,`HashMap`与`HashTable`作为两种常用的数据结构,经常被用来存储键值对数据。尽管它们在功能上相似,但在实现细节、性能表现以及使用场景方面存在显著差异。本文将深入探讨两者之间的区别,帮助读者更...

    java Hashtable的泛型化

    在早期的Java版本中,`Hashtable`并没有直接支持泛型,这意味着你可以在其中存储任何类型的键(`Object`)和值(`Object`),这可能导致类型安全问题,比如在使用时进行强制类型转换。然而,随着Java 5的发布,泛型...

    hashMap和hashTable的区别

    ### hashMap和hashTable的区别 #### 一、简介与基本概念 `HashMap` 和 `HashTable` ...然而,在现代 Java 开发实践中,推荐使用 `ConcurrentHashMap` 来代替 `HashTable`,因为它提供了更好的性能和更丰富的功能集。

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...

    HashMap和HashTable底层原理以及常见面试题

    HashMap和HashTable是Java中两个常用的数据结构,都是基于哈希表实现的,但它们之间存在着一些关键的区别。本文将深入探讨HashMap和HashTable的底层原理,并总结常见的面试题。 HashMap的底层原理 HashMap是Java中...

    Json字符串转换Hashtable,DataTable,DataSet方法和反转换方法

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于Web服务与客户端之间的数据传输。它以其简洁、易于阅读和编写的特点,成为编程语言间数据交互的首选。本篇文章将深入探讨如何...

    浅谈Java web中基于Hashtable的数据库操作.zip

    在Java Web开发中,数据库操作是不可或缺的一部分,而基于Hashtable的数据存储和检索方式曾经是早期常用的手段之一。本文将深入探讨如何在Java Web环境中利用Hashtable进行数据库交互,并讨论其优缺点以及现代开发中...

    Hashtable的使用

    **Hashtable的使用** 在Java编程语言中,`Hashtable`是一个基于键值对(key-value pairs)的数据结构,它属于同步的、线程安全的容器类。`Hashtable`是`Dictionary`类的一个子类,它不支持`null`键或`null`值。这个...

    Hashtable和HashMap的区别:

    在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **Hashtable**:作为 `Dictionary` 类的子类,`Hashtable` 是 Java 最早...

    哈希表-使用Java开发的哈希表-HashTable.zip

    在Java中,`HashTable`是早期版本(Java 1.0)提供的一种线程安全的哈希表实现。尽管现在已经被`HashMap`所替代,但理解`HashTable`的工作原理和特性仍然对深入理解Java集合框架以及数据结构有重要意义。 哈希表的...

    HashMap与HashTable和HashSet的区别

    在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程需求。本文将重点分析这三种数据结构之间的区别,特别是针对...

    asp.net遍历hashtable

    遍历Hashtable主要有两种方法:foreach循环和GetEnumerator方法。 1. 使用foreach循环遍历: ASP.NET支持C#语言,C#的foreach循环非常适合遍历集合。以下是一个简单的示例: ```csharp Hashtable myHashTable = new...

    hashtable存储数据.rar

    4. **不支持泛型**:由于`Hashtable`是早期Java版本的类,它没有使用泛型,因此键和值都使用`Object`类型,需要强制类型转换。 使用`Hashtable`的基本操作包括: - **插入元素**:使用`put(key, value)`方法将键值...

    WinFormHashTable最简单用法,.net hashtable ,hashtable ,hashtable用法

    哈希表(Hashtable)是.NET框架中的一种常用数据结构,主要用作键值对存储,它提供了快速的数据存取方式。在WinForm应用程序中,我们可能会利用Hashtable来管理各种对象,尤其是在需要高效查找和操作数据时。下面将...

    hashtable和hashmap的区别

    在Java编程语言中,`Hashtable`和`HashMap`是两种非常重要的数据结构,它们都实现了`Map`接口,用于存储键值对。尽管它们有着相似的功能,但在实现细节和应用场景上存在显著差异。接下来,我们将详细探讨`Hashtable`...

Global site tag (gtag.js) - Google Analytics