首页 > 其他 > 详细

Arrays_Strings 判断字符串中的字符是否唯一@CareerCup

时间:2014-02-28 12:02:03      阅读:420      评论:0      收藏:0      [点我收藏+]

原文:

Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?

译文:

实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)


思路:

1 暴力比较,两个for循环,O(n^2)

2 如果可以改变原字符串的字符,则可以用O(nlogn)排序,然后比较邻居字符是否一样


3 虽然不能用其他数据结构(Hashtable),但可以用array来模拟哈希表。Time: O(n), Space: O(1)

4 如果字符串只包含小写字符或者只包含大写字符,则可以用一个32位的integer代替array。


package Arrays_Strings;

public class S1_1 {

	
	// 第一种方法,开一个辅助数组存放
	// Time O(n), Space O(1)
	public static boolean isUniqueChars(String s) {
		if(s.length() > 256) {		// 预先判断字符串个数,如果超过256,根据抽屉原理,必有重复
			return false;
		}
		
		boolean[] used = new boolean[256];
		for (int i=0; i<s.length(); i++) {
			if(used[s.charAt(i)]) {
				return false;
			}
			used[s.charAt(i)] = true;
		}
		return true;
	}
	
	// 第二种方法,通过bit vector来减少空间
	// 如果字符串只包含小写字符或大写字符,则可以使用,因为26<32
	public static boolean isUniqueChars2(String str) {
		if (str.length() > 256) {
			return false;
		}
		
		int checker = 0;
		for(int i=0; i<str.length(); i++) {
			int val = str.charAt(i) - ‘a‘;
			if((checker & (1<<val)) > 0) {		// 检查checker的左起第i位
				return false;
			}
			checker |= (1<<val);	// 把checker的左起第i位置1
		}
		
		return true;
	}
	
	public static void main(String[] args) {
		String[] words = {"abcde", "hello", "apple", "kite", "padle"};
		for (String word : words) {
			System.out.println(word + ": " + isUniqueChars(word) + " " + isUniqueChars2(word));
		}
	}
}


重新捡起cc150。。。


Arrays_Strings 判断字符串中的字符是否唯一@CareerCup,布布扣,bubuko.com

Arrays_Strings 判断字符串中的字符是否唯一@CareerCup

原文:http://blog.csdn.net/fightforyourdream/article/details/20038043

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!