`
Inmethetiger
  • 浏览: 111519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

TopCode_TCCC '01 Round 2_Level One_StringDup

阅读更多

熟悉一下数据结构

Problem Statement

   

Create a class called StringDup. Given a string made up of ONLY letters and

digits, determine which character is repeated the most in the string ('A' is

different than 'a'). If there is a tie, the character which appears first in

the string (from left to right) should be returned.

 

Examples :

 

aaiicccnn = c

aabbccdd = a

ab2sbf2dj2skl = 2

 

Here is the method signature :

 

public char getMax(String input);

 

We will check to make sure that the input contains only letters and digits (no

punctuation marks or spaces).

 

Definition

   

Class:StringDup

Method:getMax

Parameters:String

Returns:char

Method signature:char getMax(String param0)

(be sure your method is public)

 

大致翻译一下:

创建一个类名字叫StringDup。给定一个仅由字母和数字组成的字符串,判定那个字符被重复的次数最多(大小写不同)。如果

有这样的关系:这个字符第一次出现在字符串中需要返回

测试数据:

aabbccdd = a

ab2sbf2dj2skl = 2

 

自己写的:

/**
	 * 时间复杂度为O(n2)
	 * */
	public char getMax(String input) {
		// 转化为数组
		char[] charArr = input.toCharArray();
		// 前面循环最大的次数
		int temp = 0;
		// 出现最多的字符
		char tempChar = ' ';
		for (int i = 0; i < charArr.length; i++) {
			// 默认出现0次。
			int count = 0;
			for (int j = i; j < charArr.length; j++) {
				// 如果后面有和当前字符相等的字符,则出现的次数加1
				if (charArr[j] == charArr[i]) {
					count++;
				}
				// 如果本轮循环的次数大于前面字符出现的次数,则本次为出现最多的次数。且该字符为charArr[i]
				if (count > temp) {
					temp = count;
					tempChar = charArr[i];
				}
			}

		}
		return tempChar;
	}

 

不过时间复杂度为O(n2)。

后来看到网上有另外一种写法,时间复杂度稍低O(n):

/**
	 * 时间复杂度为O(n)
	 * */
	public char getMax(String input) {
		// 将包含的字符放入哈希表,字符作为key,出现次数作为value
		char[] alph = input.toCharArray();
		Map<Character, Integer> aa = new HashMap<Character, Integer>();
		for (Character c : alph) {
			if (Character.isWhitespace(c))
				continue;
			if (aa.containsKey(c) == false) {
				aa.put(c, 1);
			} else {
				aa.put(c, aa.get(c) + 1);
			}
		}
		// 比较获取出现最多次数的字符
		Set<Character> set = aa.keySet();
		Iterator iter = set.iterator();
		Integer count = 0;
		Character key = new Character(' ');

		while (iter.hasNext()) {
			Character ccc = (Character) iter.next();
			if (aa.get(ccc) > count) {
				count = aa.get(ccc);
				key = ccc;
			}
		}
		return key;
	}

 不过没有解决掉aabbccdd的情况。用第二个方法。返回的是dd而不是aa

 

上面的题目可以扩展一下:

判断一个字符串在另一个字符串中出现的次数

 

 

0
1
分享到:
评论

相关推荐

    topcode编程大赛题目

    题目来自于topcode编程大赛,主要考察选手的算法思维和数学技巧。问题的核心在于判断在给定的矩阵中,是否存在一种选择元素的方式,使得每行、每列都至多选一个元素,且所有这样的选择方法下,选取元素的和(sum)都...

    Coding_Interviews:主要刷剑指Offer、TopCode、Leetcode

    2. **TopCode**:这是一个在线编程竞赛和面试题平台,它提供了大量的编程挑战,涵盖了各种难度级别的题目。参与TopCode的训练,可以帮助你在实际编程环境中锻炼解决问题的能力,同时提升你的代码质量和效率。 3. **...

    Delphi7使用case语句实现反汇编

    TOpcode = (OP_ADD, OP_SUB, OP_MUL, OP_DIV, ...); ``` 然后,我们可以在 `case` 语句中使用这个枚举来解析和解释每个指令: ```pascal procedure DecodeInstruction(Opcode: TOpcode); begin case Opcode of ...

    asp如何自动生成html文件[借鉴].pdf

    例如,`mb_code=replace(mb_code,"$cntop$",topcode)`将`$cntop$`替换为`topcode`变量的值,即当前时间。 这个过程展示了ASP如何结合数据库和自定义函数,实现动态生成HTML页面的能力。这种方法的优点在于可以将...

    仿迪士尼BC,市面上少有的.NET程序,客户服务器过期遗留下来的,喜欢的拿走

    客户服务器到期遗留下来的BC程序,有需要的可以拿走,可直接运营,.NET安全稳定!...会员:http://mem5.jzgame.topcode.top:8088/ 后台:http://ag5.jzgame.topcode.top:8088/ 后台账号密码:jinzuan ppoo0099

    CodingInterviewJava

    它涵盖了LeetCode、CareerUp 150以及TopCode等知名平台上的经典编程题目,通过解决这些问题,你可以深入理解Java语言的核心概念,提升解决问题的能力,为面试做好充分准备。 首先,我们要了解LeetCode。这是一个...

Global site tag (gtag.js) - Google Analytics