中级农民
- 积分
- 155
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-4-17
- 最后登录
- 1970-1-1
|
写了下第二轮的函数,欢迎指教,感觉这里用trie和map在时间复杂度上没有区别啊,只是空间上有优势而已。- public class TypeOne {
- public static void main(String[] args) {
- String[] strs = {"google", "facebook", "amazon"};
- TypeOne to = new TypeOne(strs);
- System.out.println(to.containsOneType("google"));
- System.out.println(to.containsOneType("geogle"));
- System.out.println(to.containsOneType("geogla"));
- }
- private Trie trie;
- public TypeOne(String[] strs) {
- trie = new Trie();
- for (String str : strs) {
- trie.insert(str);
- }
- }
-
- public boolean containsOneType(String str) {
- for (int i = 0; i < str.length(); i++) {
- for (char c = 'a'; c <= 'z'; c++) {
- if (c == str.charAt(i)) {
- continue;
- }
- String newStr = str.substring(0, i) + c + str.substring(i + 1);
- if (trie.search(newStr)) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- class Trie {
- class TrieNode {
- char c;
- boolean isLeaf = false;
- HashMap<Character, TrieNode> children = new HashMap<Character, TrieNode>();
- public TrieNode() {
- }
- public TrieNode(char c) {
- this.c = c;
- }
- }
- private TrieNode root;
- public Trie() {
- root = new TrieNode();
- }
- public void insert(String word) {
- TrieNode cur = null;
- HashMap<Character, TrieNode> curChildren = root.children;
- for (int i = 0; i < word.length(); i++) {
- char c = word.charAt(i);
- if (curChildren.containsKey(c)) {
- cur = curChildren.get(c);
- } else {
- TrieNode tmp = new TrieNode(c);
- curChildren.put(c, tmp);
- cur = tmp;
- }
- curChildren = cur.children;
- if (i == word.length() - 1) {
- cur.isLeaf = true;
- }
- }
- }
- public boolean search(String word) {
- TrieNode node = searchNode(word);
- return node != null && node.isLeaf;
- }
- public TrieNode searchNode(String word) {
- TrieNode cur = null;
- HashMap<Character, TrieNode> curChildren = root.children;
- for (int i = 0; i < word.length(); i++) {
- char c = word.charAt(i);
- if (curChildren.containsKey(c)) {
- cur = curChildren.get(c);
- } else {
- return null;
- }
- curChildren = cur.children;
- }
- return cur;
- }
-
- }
- }
复制代码 |
|