剑指offer系列之33:第一个只出现一次的字符
2016-04-12 16:52
274 查看
题目描述:在字符串中找出第一个只出现一次的字符。
思路:第一个只出现一次的字符是关键,就意味着需要所有的字符进行出现次数的统计,所以我们需要两次遍历:第一次获取每个字符出现的次数;第二次把第一个只出现一次的字符找到。在Java中可以通过HashMap实现对每个字符次数的统计,由于在题目中并没有我们限定使用Java提供的内置结构,所以可以通过这种办法迅速找到第一个只出现一次的字符。 也可以自己定义一个非常简单的哈希表,根据ASCLL码值作为数组的下标对应数组的一个数字,而数组中存储的是每个字符出现的次数。
举一反三:如果要判断多个字符是不是在某个字符串里出现过或者
4000
统计多个字符在字符串中出现的次数,可以考虑基于数组创建一个简单的哈希表,可以用很小的空间还来时间效率上的提升。
思路:第一个只出现一次的字符是关键,就意味着需要所有的字符进行出现次数的统计,所以我们需要两次遍历:第一次获取每个字符出现的次数;第二次把第一个只出现一次的字符找到。在Java中可以通过HashMap实现对每个字符次数的统计,由于在题目中并没有我们限定使用Java提供的内置结构,所以可以通过这种办法迅速找到第一个只出现一次的字符。 也可以自己定义一个非常简单的哈希表,根据ASCLL码值作为数组的下标对应数组的一个数字,而数组中存储的是每个字符出现的次数。
import java.util.*; public class Solution { public int FirstNotRepeatingChar(String str) { if(str == null || str.length() == 0){ return -1; } int position = -1;; char [] array = str.toCharArray(); int[] hash = new int[256]; for(int i = 0;i < hash.length;i++){ hash[i] = 0; } for(int i = 0;i < array.length;i++){ int ascll = (int)array[i]; hash[ascll]++; } for(int i = 0;i<array.length;i++){ int ascll = (int)array[i]; if(hash[ascll] == 1){ position = i; break; } } return position; } }
举一反三:如果要判断多个字符是不是在某个字符串里出现过或者
4000
统计多个字符在字符串中出现的次数,可以考虑基于数组创建一个简单的哈希表,可以用很小的空间还来时间效率上的提升。
相关文章推荐
- jQuery.fn.serialize 阅读
- 可回味的js代码段
- Hbuilder支持jquery、zepto、angular、ext、dojo 等js框架的提示吗
- jquery实现2级联动
- js第三方
- javascript属性方法访问
- jQuery中用el表达式的字符串取整问题
- 深入理解关于javascript中apply()和call()方法的区别
- JS 判断浏览器类型及版本,做浏览器兼容
- Html标签中thead、tbody、tfoot的作用
- JS数字格式化
- HTML学习之网页制作基础和常用标签及标签属性
- HTML 5 应用程序缓存
- js中的call替代继承问题
- jsoup
- 三个静态页面练习总结
- JavaEE Web应用的js css images html等如何模块化
- HTML5新特性之离线缓存技术
- JS中this用法详解
- JS模块化开发:使用SeaJs高效构建页面