`
不平凡的人
  • 浏览: 35691 次
  • 性别: Icon_minigender_1
  • 来自: 嘉峪关
社区版块
存档分类
最新评论

字符串排序显示问题(面试题)

 
阅读更多

今天去一家公司面试,机试做了一道关于字符串的题,做的不是很理想,下来又研究了一下:

 

题目要求:

1、给定一个字符串,只对其中的英文字符进行排序显示

2、排序显示的规则是:根据英文字符出现的次数多的在前面显示,如果出现次数相同按字典顺序显示

 

代码示例:

package net.oschina.tkj.teststring;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 字符串排序
 * 
 * @author Freedom
 * 
 */
public class SortString {

	public static void main(String[] args) {

		String str = "rrccaaaaanbZDSS 中,<>?589";
		System.out.println(getSortString(str));

	}

	public static String getSortString(String str) {
		char[] array = str.toCharArray();
		Map<Character, Integer> map = new HashMap<Character, Integer>();// 统计每个字母出现的次数
		List<Character> list = new ArrayList<>(); // 记录字符串中英文字母
		for (char c : array) {
			if (String.valueOf(c).matches("^[a-zA-Z]$") && map.containsKey(c)) {
				map.put(c, map.get(c) + 1);
			} else if (String.valueOf(c).matches("^[a-zA-Z]$")
					&& !map.containsKey(c)) {
				map.put(c, 1);
				list.add(c);
			}

		}
                
        // 冒泡排序
		for (int i = 0; i < list.size(); i++) {
			for (int j = 0; j < list.size() - 1 - i; j++) {
				// 字母出现次数从大到小排序,倒序
				if (map.get(list.get(j)) < map.get(list.get(j + 1))) {
					char tmp = list.get(j + 1);
					list.set(j + 1, list.get(j));
					list.set(j, tmp);
				}

				// 出现次数相同,字典顺序显示
				if (map.get(list.get(j)) == map.get(list.get(j + 1))) {
					if (list.get(j) > list.get(j + 1)) {
						char tmp = list.get(j);
						list.set(j, list.get(j + 1));
						list.set(j + 1, tmp);
					}
				}
			}
		}

		return list.toString();
	}

}

 运行结果如下:

[a, S, c, r, D, Z, b, n]

 

 

 

分享到:
评论

相关推荐

    Shell、awk、sed面试题汇总(无答案).doc

    Shell、awk、sed 面试题汇总 以下是从给定的文件中生成的相关知识点: Shell 1. 变量赋值:在 Shell 中,可以使用多种方法来赋值变量,包括直接赋值、使用 `read` 命令、使用命令行参数和使用命令的输出。 2. ...

    Oracle面试题精选

    这些面试题涵盖了 Oracle 中的多种类型的查询,包括基本查询、条件查询、字符串查询、多表查询、聚合查询、日期查询、分组查询和排序和连接查询等,能够帮助开发者快速掌握 Oracle 的各种查询语法和技术。

    中软面试题

    在这个问题中,可以使用 charAt(2) 方法来获取字符串中的第二个字符。 知识点:Java 字符串操作、charAt 方法。 7. 对于长度为 n 的线性表,在最坏的情况下,下列各排序法所对应的比较次数中正确的是(D) 这道题...

    我找的面试题

    `getValue`方法用于从`field`文本框中获取用户输入的数字字符串,通过`split(",")`将字符串分割成数组,并将每个元素转换为整数,存储在`int[] list`中。这个方法是排序功能的核心,它确保了数据的提取和转换。 `...

    Java中级面试题

    ### Java中级面试题详解 #### Java基础 **1. StringBuffer的实现方式,容量如何扩充** - **实现方式**: `StringBuffer`内部通过一个字符数组`char[] value`来存储字符串内容。 - **容量扩充**: 当执行`append`...

    javascript面试题汇总

    默认情况下,它按照字符串顺序排序数组元素。 12. **DOM元素的区别**:`DIV`和`SPAN`都是HTML元素,`DIV`常用于分组和布局,有换行;`SPAN`用于文本级的元素组合,无换行。 13. **innerHTML, outerHTML, innerText...

    javascript的经典面试题汇总

    - **sort()** 方法用于对数组元素进行排序,默认按照转换为字符串的字符码顺序排序。 - **无参数时**: 默认按照字符串的Unicode码值排序。 - **带参数时**: 可以传入一个比较函数作为参数,用于自定义排序逻辑。 ...

    SQL精选面试题

    NULL 这个值表示 UNKNOWN(未知):它不表示“(空字符串)”。 八、索引类型 索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在 SQL Server 里,它们有两种形式:聚集索引和非聚集索引。聚集索引在...

    .net 绝版面试题 面试必备

    标题中的".net 绝版面试题 面试必备"表明这是一个关于.NET框架的面试问题集,主要测试面试者对.NET技术的理解和应用能力。以下是对这些知识点的详细解释: 1. `@page`指令是ASP.NET中用于定义ASPX页面的起点,它...

    Java经典面试题(带答案)

    Java经典面试题 知识点1: 数据统计 在给定的文本文件中,统计出总行数,并找出出现次数最多的那个整数。这个问题考察了数据统计和分析的能力。在解决这个问题时,需要使用Java中的文件输入/输出流、字符串处理和数...

    PHP经典面试题

    ### PHP经典面试题详解 #### 1. PHP的含义及特点 **问题**: PHP是什么? **答案**: PHP 是一种开放源代码的服务器端脚本语言,特别适合于 Web 开发并可嵌入 HTML 中。PHP 的全称是 "PHP: Hypertext Preprocessor"...

    前端最近几年的面试题手册

    在前端领域,面试题涵盖了广泛的知识点,包括HTML、CSS、JavaScript、HTTP、TCP、DOM、浏览器原理、前端工程化、React、Vue、前端安全、webpack、算法、字符串类笔试题以及JS笔试题等。这些内容是前端开发人员必备的...

    阿里java常考面试题及汇总答案.docx

    以下是一些基于题目给出的面试题所涵盖的关键知识点: 一、关于String、StringBuffer和StringBuilder的区别: - String是不可变对象,一旦创建就无法改变,这归因于其final类的特性,提供高效且安全的字符串操作。 ...

    java 面试题 经典收藏

    1. **排序并遍历**:首先对字符串进行冒泡排序,然后遍历排序后的字符串,记录每个字符出现的次数,并找到出现次数最多的字符及其出现次数。 ```java public static void main(String[] args) { String s = "1456...

    java面试题广州

    2. **字符串反转算法**:字符串反转可以通过循环或递归实现,例如,使用双指针从两端向中间移动,交换对应位置的字符,直到两指针相遇。 3. **千分位格式化**:将数字转换为含千分隔符的字符串,可以通过正则表达式...

    Oracle企业面试题集锦

    以上就是从提供的信息中总结出的Oracle企业面试题集锦中的核心知识点,涵盖了Oracle与SQL Server的区别、Oracle特性、数据库管理、性能优化等多个方面。这些知识点对于深入理解和掌握Oracle数据库的使用和管理具有...

    2018_BAT的55道sql面试题

    在BAT(百度、阿里巴巴、腾讯)等互联网大公司中,SQL面试题是技术面试的重要组成部分,因为掌握SQL是任何数据库工程师或数据分析师的基础技能。以下是一些常见问题的详细解答: 1. **ID自增主键**:在MySQL中,...

    asp.net初级程序员面试题

    ASP.NET 初级程序员面试题涉及了多个核心概念和技术,以下是对这些知识点的详细解析: 1. 访问修饰符:`private`、`protected`、`public`、`internal`是C#中的访问控制修饰符,它们决定了类成员的可见性。 - `...

    Java面试试题精选

    综上所述,这些知识点覆盖了Java面试中经常考察的关键领域,包括但不限于访问修饰符的作用范围、类加载机制的理解、字符串处理技巧、基本数据类型的掌握、集合框架的应用、EJB架构的设计等方面。这些知识不仅对于...

Global site tag (gtag.js) - Google Analytics