今天去一家公司面试,机试做了一道关于字符串的题,做的不是很理想,下来又研究了一下:
题目要求:
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 面试题汇总 以下是从给定的文件中生成的相关知识点: Shell 1. 变量赋值:在 Shell 中,可以使用多种方法来赋值变量,包括直接赋值、使用 `read` 命令、使用命令行参数和使用命令的输出。 2. ...
这些面试题涵盖了 Oracle 中的多种类型的查询,包括基本查询、条件查询、字符串查询、多表查询、聚合查询、日期查询、分组查询和排序和连接查询等,能够帮助开发者快速掌握 Oracle 的各种查询语法和技术。
在这个问题中,可以使用 charAt(2) 方法来获取字符串中的第二个字符。 知识点:Java 字符串操作、charAt 方法。 7. 对于长度为 n 的线性表,在最坏的情况下,下列各排序法所对应的比较次数中正确的是(D) 这道题...
`getValue`方法用于从`field`文本框中获取用户输入的数字字符串,通过`split(",")`将字符串分割成数组,并将每个元素转换为整数,存储在`int[] list`中。这个方法是排序功能的核心,它确保了数据的提取和转换。 `...
### Java中级面试题详解 #### Java基础 **1. StringBuffer的实现方式,容量如何扩充** - **实现方式**: `StringBuffer`内部通过一个字符数组`char[] value`来存储字符串内容。 - **容量扩充**: 当执行`append`...
默认情况下,它按照字符串顺序排序数组元素。 12. **DOM元素的区别**:`DIV`和`SPAN`都是HTML元素,`DIV`常用于分组和布局,有换行;`SPAN`用于文本级的元素组合,无换行。 13. **innerHTML, outerHTML, innerText...
- **sort()** 方法用于对数组元素进行排序,默认按照转换为字符串的字符码顺序排序。 - **无参数时**: 默认按照字符串的Unicode码值排序。 - **带参数时**: 可以传入一个比较函数作为参数,用于自定义排序逻辑。 ...
NULL 这个值表示 UNKNOWN(未知):它不表示“(空字符串)”。 八、索引类型 索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在 SQL Server 里,它们有两种形式:聚集索引和非聚集索引。聚集索引在...
标题中的".net 绝版面试题 面试必备"表明这是一个关于.NET框架的面试问题集,主要测试面试者对.NET技术的理解和应用能力。以下是对这些知识点的详细解释: 1. `@page`指令是ASP.NET中用于定义ASPX页面的起点,它...
Java经典面试题 知识点1: 数据统计 在给定的文本文件中,统计出总行数,并找出出现次数最多的那个整数。这个问题考察了数据统计和分析的能力。在解决这个问题时,需要使用Java中的文件输入/输出流、字符串处理和数...
### PHP经典面试题详解 #### 1. PHP的含义及特点 **问题**: PHP是什么? **答案**: PHP 是一种开放源代码的服务器端脚本语言,特别适合于 Web 开发并可嵌入 HTML 中。PHP 的全称是 "PHP: Hypertext Preprocessor"...
在前端领域,面试题涵盖了广泛的知识点,包括HTML、CSS、JavaScript、HTTP、TCP、DOM、浏览器原理、前端工程化、React、Vue、前端安全、webpack、算法、字符串类笔试题以及JS笔试题等。这些内容是前端开发人员必备的...
以下是一些基于题目给出的面试题所涵盖的关键知识点: 一、关于String、StringBuffer和StringBuilder的区别: - String是不可变对象,一旦创建就无法改变,这归因于其final类的特性,提供高效且安全的字符串操作。 ...
1. **排序并遍历**:首先对字符串进行冒泡排序,然后遍历排序后的字符串,记录每个字符出现的次数,并找到出现次数最多的字符及其出现次数。 ```java public static void main(String[] args) { String s = "1456...
2. **字符串反转算法**:字符串反转可以通过循环或递归实现,例如,使用双指针从两端向中间移动,交换对应位置的字符,直到两指针相遇。 3. **千分位格式化**:将数字转换为含千分隔符的字符串,可以通过正则表达式...
以上就是从提供的信息中总结出的Oracle企业面试题集锦中的核心知识点,涵盖了Oracle与SQL Server的区别、Oracle特性、数据库管理、性能优化等多个方面。这些知识点对于深入理解和掌握Oracle数据库的使用和管理具有...
在BAT(百度、阿里巴巴、腾讯)等互联网大公司中,SQL面试题是技术面试的重要组成部分,因为掌握SQL是任何数据库工程师或数据分析师的基础技能。以下是一些常见问题的详细解答: 1. **ID自增主键**:在MySQL中,...
ASP.NET 初级程序员面试题涉及了多个核心概念和技术,以下是对这些知识点的详细解析: 1. 访问修饰符:`private`、`protected`、`public`、`internal`是C#中的访问控制修饰符,它们决定了类成员的可见性。 - `...
综上所述,这些知识点覆盖了Java面试中经常考察的关键领域,包括但不限于访问修饰符的作用范围、类加载机制的理解、字符串处理技巧、基本数据类型的掌握、集合框架的应用、EJB架构的设计等方面。这些知识不仅对于...