找出n个字符串中出现次数最多的字符串。

1. 找出n个字符串中出现次数最多的字符串。

C/C++:

char* find(char **data,int n);

Java:

String find(String data[]);

说明:

1. data是字符串数组,n是数组中字符串的个数,返回值为出现次数最多的字符串。

2. 若结果有多个,返回任意一个即可

3. 不得使用任何库函数/API,如需使用类似功能, 请自行实现

4. 算法效率尽可能高,尽量少的使用内存空间

5. 必须要有代码注释和算法说明。

例如:data里面的数据是{“paper”,”cup”,”book”,”cup”,”pen”,”book”}。n = 6。返回结果为”cup”或”book”。

package offer;

/**
 * 解决问题:找出n个字符串中出现次数最多的字符串。 解决思路:通过对字典树进行改造,在提高效率的同时,完成对出现最多自身的统计。
 *
 *
 * @author cxx
 *
 */
public class FindMaxCountWord {

	private TrieNode root = new TrieNode();// 字典树的根节点
	private int max;// 统计出现的最大次数
	private String maxWord;// 出现最大次数的字符串

	protected class TrieNode {
		protected int words;// 统计从根到该节点的单词出现的个数
		protected TrieNode[] edges;// 存放该节点的子节点

		TrieNode() {
			this.words = 0;
			edges = new TrieNode[26];// 题目对于字符没有做出限制,这里默认全是小写字符
			for (int i = 0; i < edges.length; i++) {
				edges[i] = null;
			}
		}
	}

	// 向字典树中添加单词
	public void addWord(String word) {
		addWord(root, word, word);// 第二个word是个冗余参数,为了记录增加的单词
	}

	private void addWord(TrieNode vertex, String word, String wordcount) {
		if (word.length() == 0) {
			vertex.words++;
			if (max < vertex.words) {
				max = vertex.words;
				maxWord = wordcount;
			}
		} else {
			char c = word.charAt(0);
			c = Character.toLowerCase(c);
			int index = c - ‘a‘;
			if (vertex.edges[index] == null) { // 构建节点的路径
				vertex.edges[index] = new TrieNode();
			}
			addWord(vertex.edges[index], word.substring(1), wordcount);
		}
	}

	// 返回出现次数最大的单词
	public String maxCountWord() {
		return maxWord;
	}

	public static void main(String args[]) // Just used for test
	{
		FindMaxCountWord trie = new FindMaxCountWord();

		String[] data = { "paper", "ckup", "book", "cup", "pen", "book" };

		for (int i = 0; i < data.length; i++) {
			trie.addWord(data[i]);
		}

		System.out.println(trie.maxCountWord());

	}

}

  

时间: 2024-10-29 10:46:23

找出n个字符串中出现次数最多的字符串。的相关文章

我的Java开发学习之旅------&gt;求字符串中出现次数最多的字符串以及出现的次数

金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出. 此题的解题思路如下: 引入TreeSet:通过集合快速找到所有出现过的字符串 引入ArrayList:为了快速排序,再通过StringBuffer生成排序后的字符串 通过String的indexOf方法和lastIndexOf方法来计算每个字符串出现的次数最大值 使用HashMap

javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

1 function test(){ 2 var bt = document.getElementById("bt"); 3 bt.addEventListener("click",function(){ 4 5 var str = "dafdsjkfnaiesdaadsllllllkkkkk444444444444444"; 6 var obj = []; // 存放结果集的数组,结果中存放 key-value 对象 7 for(var i =

找出字符串中出现次数最多的字符,和最大次数

/*找出字符串中出现次数最多的字符,和最大次数*/ function countMax(str){ var max = 0; // 记录出现的最大次数 var maxChar = ""; // 记录出现最多次数的字符 var counts = new Array(127); // 记录中间计算结果 for(var i = 0; i < counts.length; i++){ counts[i] = 0; } for(var i = 0; i < str.length; i

找出该字符串中出现次数最多的那个字符

/*时间限制 C/C++ 3s 其他 6s, 空间限制 C/C++ 32768k 其他 65535k 题目描述     给定一个长度不限的字符串,请找出该字符串中出现次数最多的那个字符,并打印出该字符及其出现次数; 如果多个字符的出 现次数相同,只打印首个字符;输出字符的大小写格式要与输 入保持一致,大小写不敏感模式下, 输出字符的大小写格式与该 字符首次出现时的大小写格式一致.实现时无需考虑非法输. 输入描述     输入为 字符串大小写敏感标记 其中"大小写敏感标记"为可选参数,取

[email&#160;protected]返回字符串中出现次数最多的那个字符和次数2

1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>@返回字符串中出现次数最多的那个字符和次数2</title> 6 7 </head> 8 <body> 9 </body> 10 11 <script type="text/javasc

js查找字符串中出现次数最多的字符

js查找字符创中出现次数最多的字符及次数 var str = 'Helloworldtomy'; 1 function max(str){ 2 var json={}; 3 for(var i=0;i<str.length;i++){ 4 var k=str[i]; // 获取到字符串中的每个字符 5 if(json[k]){ 6 json[k]++; //json里有这个字符时,把这个字符的数量+1, 7 } 8 else{ 9 json[k]=1; //否则把这个字符的数量设为1 10 }

js常会问的问题:找出字符串中出现次数最多的字符。

一.循环obj let testStr = 'asdasddsfdsfadsfdghdadsdfdgdasd'; function getMax(str) { let obj = {}; for(let i in str) { if(obj[str[i]]) { obj[str[i]]++; }else{ obj[str[i]] = 1; } } let keys = Object.keys(obj); // 获取对象中所有key的值返回数组 let values = Object.values

获取字符串中出现次数最多的字符

var stringUtil = {}; stringUtil.getMaxLengthCharacter = function(s){ var info = {}, getObj, getMaxLength; //把字符和出现次数存放在对象中 getObj = (function(s){ var obj = {}; for(var i = 0, j = s.length; i < j; i++){ if(obj[s[i]]){ obj[s[i]] += 1; }else{ obj[s[i]]

如果用JS得到字符串中出现次数最多的字母

一个字符串String=“adadfdfseffserfefsefseetsdg”,找出里面出现次数最多的字母和出现的次数. 经典的解答思路为:取出字符串的第一个字符(首字母),利用的字符串的 replace 方法将符合正则表达式(第一个字符)替代为空,此字母出现的次数为原始的字符串长度减去替代后的字符串长度.循环迭代找出长度最长的字母. 源码: <script type="text/javascript">   var str ="adadfdfseffserf