1.1 Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?
/**
* Implement an algorithm to determine if a string has all unique characters.
* What if you can not use additional data structures?
*/
import java.util.Scanner;
import java.util.Arrays;
import java.util.Hashtable;
public class Solution{
//brute-force O(n^2)
static boolean isUnique(String s){//brute-force
for(int i=0;i < s.length()-1;i++)
for(int j=i+1;j < s.length();j++)
if(s.charAt(i) == s.charAt(j))
return false;
return true;
}
//first to sort, find iterfacing elements is repeat
//O(nlogn) = max{O(nlogn), O(n)}
static boolean isUnique2(String s){//sort and find
char[] cs = s.toCharArray();
Arrays.sort(cs);//O(nlogn)
for(int i=0;i < cs.length-1;i++)
if(cs[i] == cs[i+1])
return false;
return true;
}
static boolean isUnique3(String s){//if Hashtable's find complexity is O(1),then result is O(n)
Hashtable<Character, String> hash =
new Hashtable<Character, String>();
for(int i=0;i < s.length();i++){
if(hash.containsKey(s.charAt(i)))
return false;
else
hash.put(s.charAt(i), "");
}
return true;
}
public static void main(String[] args){
Scanner keyin = new Scanner(System.in);
String s = null;
while(!(s = keyin.next()).equals("quit")){
System.out.println(Solution.isUnique3(s));
}
}
}