确定一个字符串的所有字符全都不同算法实现
2016-04-03 18:11
411 查看
首先要确认字符串的编码方式,是ASCII还是Unicode,这很重要。
我们就当是ASCII来处理吧,如果不是的话,只需要扩大存储空间就可以了,其余逻辑都是一样的。
算法一:
算法的中心思想是利用散列表的原理,先初始化一个数组,然后循环取出字符,将下标为此字符的ASCII值的位置置为true,如果将要存储的下标已经是true,则证明有重复的字符了,返回false。
这个算法的时间复杂度为O(n),其中n为字符串长度。空间复杂度为O(1)。
算法二:
算法的中心思想是使用位向量,可以将空间占有减少为原来的1/8。因为boolean是一个字节,int是4个字节。
我们就当是ASCII来处理吧,如果不是的话,只需要扩大存储空间就可以了,其余逻辑都是一样的。
算法一:
算法的中心思想是利用散列表的原理,先初始化一个数组,然后循环取出字符,将下标为此字符的ASCII值的位置置为true,如果将要存储的下标已经是true,则证明有重复的字符了,返回false。
/** * 判断一个字符串是否各个字符都不同 * * @author liudezhi */ public class StringIsRepeat { public static void main(String[] args) { String str = "asdfghjkla"; boolean resultFlag = isUniqueChars(str); System.out.println("结果为:"+resultFlag); } /** * 全不相同返回true,有相同的返回false * @param str * @return */ public static boolean isUniqueChars(String str) { if (str.length() > 256) { return false; } boolean[] char_set = new boolean[256]; for (int i = 0; i < str.length(); i++) { int val = str.charAt(i); if(char_set[val]){//这个字符已经在字符串中出现过 return false; } char_set[val] = true; } return true; } }
这个算法的时间复杂度为O(n),其中n为字符串长度。空间复杂度为O(1)。
算法二:
算法的中心思想是使用位向量,可以将空间占有减少为原来的1/8。因为boolean是一个字节,int是4个字节。
/** * 判断一个字符串是否各个字符都不同 * * @author Administrator */ public class StringIsRepeat { public static void main(String[] args) { String str = "asdfghjkl"; resultFlag = isUniqueChars(str); System.out.println("结果为:"+resultFlag); } /** * 全不相同返回true,有相同的返回false * @param str * @return */ public static boolean isUniqueChars(String str){ if(str.length() > 26) { return false; } int checker = 0; for(int i = 0;i < str.length(); i++){ int val = str.charAt(i)-'a'; if((checker & (1<<val)) > 0){ return false; } checker |= (1<<val); } return true; } }
相关文章推荐
- 分析Linux内核创建一个新进程的过程
- Java单例模式
- 使用Redis分布式队列
- POJ 3468 A Simple Problem with Integers 【树状数组】
- #通过一道阿里笔试题加深对JVM的理解
- Java Arrays.sort源代码解析
- 工厂模式
- 在NodeJS中玩转Protocol Buffer
- Java初始化3
- ubuntu下 rc.local的脚本不运行
- 【linux】记一次httpd服务正常,http不能访问的惨痛教训
- Design_pattern之单例模式
- java.io.Serializable浅析
- linux内核启动过程追踪
- jQuery代码优化:事件委托篇
- ASP.Net后台 实现先弹出对话框,再跳转到另一个网页的实现方法
- Dubbo基本原理机制(优秀推荐)
- UVa 12563 - Jin Ge Jin Qu hao(类01背包,白书)
- 初学者教程:第一只爬虫——爬取招聘信息(三)
- 腾讯后台模拟笔试题(附答案)