判断字符数组中是否所有的字符都出现一次

来源:互联网 发布:日式风衣知乎 编辑:程序博客网 时间:2024/06/14 03:50
/** * Created by lxw, liwei4939@126.com on 2017/10/31. * 判断字符数组中是否所有的字符都出现一次 * 实现时间复杂度为O(N)的方法 * 在保证空间复杂度为O(1)的前提下,时间复杂度尽可能低 */public class stringIsUnique {    public boolean isUnique1(char[] arr){        if(arr == null){            return true;        }        boolean[] map = new boolean[256];        for (int i=0; i< arr.length; i++){            if(map[arr[i]]){                return false;            }            map[arr[i]] = true;        }        return true;    }    public boolean isUnique2(char[] arr){        if(arr == null){            return true;        }        heapSort(arr);        for (int i=1; i< arr.length; i++){            if(arr[i] == arr[i-1]){                return false;            }        }        return true;    }    public void heapSort(char[] arr){        for (int i=0; i< arr.length; i++){            heapInsert(arr, i);        }        for (int i=arr.length -1; i>0; i--){            swap(arr, 0, i);            heapify(arr, 0, i);        }    }    public void heapify(char[] arr, int i, int size){        int left = 2*i + 1;        int right = 2*i +2;        int largest = i;        while (left < size){            if(arr[left] > arr[i]){                largest = left;            }            if(right < size && arr[right] > arr[largest]){                largest = right;            }            if(largest != i){                swap(arr, largest, i);            } else {                break;            }            i = largest;            left = 2*i + 1;            right = 2*i + 2;        }    }    public void heapInsert(char[] arr, int i){        int parent =0;        while (i != 0){            parent = (i-1)/2;            if(arr[parent] < arr[i]){                swap(arr, parent, i);                i = parent;            } else {                break;            }        }    }    public void swap(char[] arr, int index1, int index2){        char tmp = arr[index1];        arr[index1] = arr[index2];        arr[index2] = tmp;    }    public static void main(String[] args){        stringIsUnique tmp = new stringIsUnique();        char[] arr = new char[]{'a', 'b', 'a'};        System.out.println(tmp.isUnique2(arr));    }}

阅读全文
0 0