Untitled
Darin
plain_text
2 years ago
2.6 kB
6
Indexable
Tối ưu đoạn code sau cả về thời gian chạy và syntax sao cho dễ hiểu nhất, ngắn gọn nhất. import java.util.HashMap; import java.util.Map; import java.util.TreeSet; class UserSolution { Map<String, TreeSet<String>> mapDir[] = new HashMap[3]; Map<String, Room> map = new HashMap<>(); Room current; void init() { map.clear(); for (int i = 0; i < 3; i++) { mapDir[i] = new HashMap<>(); } } void addRoom(int mID, char[] mWord, int[] mDirLen) { Room room = new Room(mID, mWord, mDirLen); room.addToHash(); } void setCurrent(char mWord[]) { current = map.get(string(mWord)); } // di chuyển current, nếu không được return 0 int moveDir(int mDir) { String keyWord = current.dir[mDir]; if (mapDir[mDir].get(keyWord) != null) { for (String word : mapDir[mDir].get(keyWord)) { Room room = map.get(word); if (room != current) { // ??? current = room; return room.id; } } } return 0; } void changeWord(char mWord[], char mChgWord[], int mChgLen[]) { Room room = map.get(string(mWord)); room.removeFromHash(); addRoom(room.id, mChgWord, mChgLen); if (room == current) { // ??? current = map.get(string(mChgWord)); } } class Room { int id; String word; String dir[] = new String[3]; Room(int mID, char[] mWord, int[] mDirlen) { id = mID; word = string(mWord); dir[0] = word.substring(0, mDirlen[0]); dir[1] = word.substring(4, 7); dir[2] = word.substring(word.length() - mDirlen[2]); } void addToHash() { // thêm Room vào map với từ khóa word // đảo ngược map.put(word, this); // back mapDir[2].computeIfAbsent(word.substring(0, 2), k -> new TreeSet<>()).add(word); mapDir[2].computeIfAbsent(word.substring(0, 4), k -> new TreeSet<>()).add(word); // middle mapDir[1].computeIfAbsent(word.substring(4, 7), k -> new TreeSet<>()).add(word); // front mapDir[0].computeIfAbsent(word.substring(7), k -> new TreeSet<>()) .add(word); mapDir[0].computeIfAbsent(word.substring(9), k -> new TreeSet<>()) .add(word); } void removeFromHash() { map.remove(word); mapDir[2].get(word.substring(0, 2)).remove(word); mapDir[2].get(word.substring(0, 4)).remove(word); mapDir[1].get(word.substring(4, 7)).remove(word); mapDir[0].get(word.substring(7)).remove(word); mapDir[0].get(word.substring(9)).remove(word); } } String string(char[] s) { return new String(s).trim(); } }
Editor is loading...