package com.thinker.test.test1;

/**
 * 实现一个算法，确定一个字符串是否全都不同。假使不允许使用额外的数据结构，又该如何处理。
 */
public class Test_1_1{
	
  private static boolean isUnique1(String str){
		if(str.length() > 256) return false;
		boolean[] bool = new boolean[256];
		for(int i=0;i<str.length();i++){
			int val = str.charAt(i);
			if(bool[val]){
				return false;
			}
			bool[val] = true;
		}
		return true;
	}

	private static boolean isUnique2(String str){
		if(str.length() > 256) return false;
		int check = 0;
		for(int i=0;i<str.length();i++){
			int tmp = str.charAt(i) - 'A';
			if((check & (1 << tmp)) > 0){
				return false;
			}
			check |= (1 << tmp);
		}
		return true;
	}

	private static boolean isUnique3(String str){
		return !str.matches(".*(.)(.*\\1.*)");
	}
	public static void main(String[] args){
		System.out.println("第一种方法："+isUnique1("dkeohsalh"));
		System.out.println("第二种方法："+isUnique2("dkeohsalh"));
		System.out.println("第三种方法："+isUnique3("dkeohsalh"));
	}
}
