前言:
今天大家对“大学java试题”大约比较关怀,兄弟们都需要了解一些“大学java试题”的相关文章。那么小编同时在网摘上搜集了一些有关“大学java试题””的相关文章,希望我们能喜欢,各位老铁们一起来了解一下吧!在整理计算机时,发现某某公司一道算法面试题,原题找不到了,只找出来注释和算法,发出来大家探讨下.
Given a valid sentence without any spaces between the words and a dictionary of valid English words, find all possible ways to break the sentence in individual dictionary words.
public List<String> searchWord(String testWord, String[]... dictionarys) { List<String> dictionaryList = new ArrayList<String>(); for(String[] array : dictionarys) { dictionaryList.addAll(Arrays.asList(array)); } List<String> listAllDistinct = dictionaryList.stream().distinct().collect(Collectors.toList()); Node root = null; Node node = null; int slength = testWord.length() + 1; boolean[] stauts = new boolean[slength]; Queue<Integer> queue = new LinkedList<Integer>(); Utils.getStartIndex(queue, root); int size = 0; while (!queue.isEmpty()) { size = queue.size(); for (int i = 0; i < size; i++) { int startPosition = queue.poll().intValue(); for (String word : listAllDistinct) { int endIndex = startPosition + word.length(); if (endIndex > slength) { continue; } else if (endIndex == slength) { endIndex = endIndex - 1; } String result = testWord.substring(startPosition, endIndex); if (!result.equals(word)) { continue; } stauts[startPosition] = true; // hit or not hie while the and node = new Node(startPosition, endIndex, result); root = Utils.addNode(root, node); } // while finish it is need hit if (startPosition == slength - 1) { stauts[startPosition] = true; } if (!stauts[startPosition]) { if (null == root) { root = new Node(0, -1, ""); }else { Utils.deleteNode(startPosition, root); } } } if (!stauts[slength - 1]) { Utils.getStartIndex(queue, root); } } List<String> checkResultList = new ArrayList<String>(); Utils.outString(new StringBuffer(""), root, checkResultList); return checkResultList; }
public class Utils { public static Node addNode(Node root, Node node) { if (null == root) { root = node; } else { addChildNode(root, node); } return root; } public static void addChildNode(Node root, Node node) { if(root.getEndIndex() == node.getStartIndex()) { if (null == root.getChildNode()) { List<Node> nlist = new ArrayList<Node>(); root.setChildNode(nlist); root.add(node); } else{ boolean isAdd = true; for(Node child : root.getChildNode()) { if (child.getStartIndex() == node.getStartIndex() && child.getEndIndex() == node.getEndIndex() && child.getWord().equals(node.getWord())) { isAdd = false; break; } } if (isAdd) { root.getChildNode().add(node); } } } else if(null != root.getChildNode()){ for (Node child : root.getChildNode()) { addChildNode(child, node); } } } public static Queue<Integer> getStartIndex(Queue<Integer> queue, Node node) { if (null == node) { queue.add(0); } else if (null == node.getChildNode()) { if (node.getEndIndex() != -1) { queue.add(node.getEndIndex()); } } else { for (Node childNode : node.getChildNode()) { getStartIndex(queue, childNode); } } return queue; } public static void deleteNode(int deleteIndex, Node root) { if (deleteIndex == root.getEndIndex()) { root = null; } else if (null != root.getChildNode()) { Iterator<Node> iterator = root.getChildNode().iterator(); while (iterator.hasNext()) { Node childNode = iterator.next(); if (deleteIndex == childNode.getEndIndex()) { iterator.remove(); }else { deleteNode(deleteIndex, childNode); } } } } public static void outString(StringBuffer sb, Node node, List<String> listBuffer) { if (null == node.getChildNode()) { sb.append(" " + node.getWord()); listBuffer.add(sb.delete(0, 1).toString()); } else { sb.append(" " + node.getWord()); for (Node childNode : node.getChildNode()) { outString(new StringBuffer(sb), childNode, listBuffer); } } // return sb.toString(); }}
public class Node{ private int startIndex; private int endIndex; private String word; private List<Node> nextNode = null; public Node(int startIndex, int endIndex, String word) { this.startIndex = startIndex; this.endIndex = endIndex; this.word = word; } public void add(Node node){ nextNode.add(node); } public int getStartIndex() { return startIndex; } public void setStartIndex(int startIndex) { this.startIndex = startIndex; } public int getEndIndex() { return endIndex; } public void setEndIndex(int endIndex) { this.endIndex = endIndex; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } public List<Node> getChildNode() { return nextNode; } public void setChildNode(List<Node> nextNode) { this.nextNode = nextNode; }}
测试代码:
@Test public void testString1UseDictionary1() { WordBreak codeTest = new WordBreak(); String[] dictionary = { "i", "like", "sam", "sung", "samsung", "mobile", "ice", "cream", "and", "man", "go" }; String str = "ilikesamsungmobile"; List<String> result = codeTest.searchWord(str, dictionary); String[] array = { "i like sam sung mobile", "i like samsung mobile" }; Assert.assertArrayEquals(array, result.toArray()); } @Test public void testString2UseDictionary1() { WordBreak codeTest = new WordBreak(); String[] dictionaryArray = { "i", "like", "sam", "sung", "samsung", "mobile", "ice", "cream", "and", "man", "go" }; String str = "ilikeicecreamandmango"; List<String> result = codeTest.searchWord(str, dictionaryArray); String[] array = { "i like ice cream and man go" }; Assert.assertArrayEquals(array, result.toArray()); } @Test public void testUserDictionary1() { WordBreak codeTest = new WordBreak(); String[] dictionary = { "i", "like", "sam", "sung", "mobile", "icecream", "and", "man go", "mango" }; String str = "ilikeicecreamandmango"; List<String> result = codeTest.searchWord(str, dictionary); String[] array = { "i like icecream and mango" }; Assert.assertArrayEquals(array, result.toArray()); } @Test public void testUserDictionary2() { WordBreak codeTest = new WordBreak(); String[] dictionary = { "i", "like", "sam", "sung", "mobile", "icecream", "and", "man", "go", "mango" }; String str = "ilikeicecreamandmango"; List<String> result = codeTest.searchWord(str, dictionary); String[] array = { "i like icecream and man go", "i like icecream and mango" }; Assert.assertArrayEquals(array, result.toArray()); } @Test public void testDoubleDictionary() { WordBreak codeTest = new WordBreak(); String[] dictionary1 = { "i", "like", "sam", "sung", "samsung", "mobile", "ice", "cream", "and", "man", "go" }; String[] dictionary2 = { "i", "like", "sam", "sung", "mobile", "icecream", "and", "man", "go", "mango" }; String str = "ilikeicecreamandmango"; List<String> result = codeTest.searchWord(str, dictionary1, dictionary2); String[] array = { "i like ice cream and man go", "i like ice cream and mango", "i like icecream and man go", "i like icecream and mango" }; Assert.assertArrayEquals(array, result.toArray()); } @Test public void testWithoutHit() { WordBreak codeTest = new WordBreak(); String[] dictionary1 = { "our", "me", "summer", "song" }; String str = "ilikeicecreamandmango"; List<String> result = codeTest.searchWord(str, dictionary1); String[] array = { "" }; Assert.assertArrayEquals(array, result.toArray()); } @Test public void testHalfHit() { WordBreak codeTest = new WordBreak(); String[] dictionary1 = { "i", "like", "ice" }; String str = "ilikeicecreamandmango"; List<String> result = codeTest.searchWord(str, dictionary1); String[] array = {}; Assert.assertArrayEquals(array, result.toArray()); }
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #大学java试题