龙空技术网

java面试 机试题(1)

西瓜地的守护者 207

前言:

今天大家对“大学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试题