문자 배열 에 있 는 모든 문자 가 한 번 만 나타 나 는 지 판단 합 니 다.

[제목]
하나의 문자 형식 배열 chas 를 지정 하여 chas 에 모든 문자 가 한 번 밖 에 나타 나 지 않 았 는 지 판단 합 니 다.
[기본 아이디어]
시간 복잡 도가 O(N)인 알고리즘      해시 테이블 을 사용 하여 문자 마다 나타 나 는 빈 도 를 기록 합 니 다.문자 의 빈도 가 1 이 아 닌 것 을 발견 하면 False 로 되 돌아 갑 니 다.
2.시간 복잡 도 는 O(NLogN)이 고 공간 복잡 도 는 O(1)의 알고리즘 입 니 다.      1.배열 을 정렬 한 다음 현재 문자 가 이전 문자 와 같 는 지 판단 하면 됩 니 다.      2.어떤 정렬 알고리즘 을 사용 하 느 냐 가 관건 이 고 복잡 도 요 구 를 만족 시 키 는 알고리즘 은 재 귀 판 이 아 닌 더미 정렬 만 있 습 니 다.
C++버 전:
#include
#include
using namespace std;

//         
void heapInsert(string& s,int i){
    int parent=0;
    while(i)
    {
        parent=(i-1)/2;//     
        if(s[parent]>=s[i])
            break;
        swap(s[parent],s[i]);
        i=parent;
    }
    return ;
}
//   ,                     
void heapify(string &s,int i,int length){
    //   
    int left=i*2;
    int right=i*2+1;
    int largest=i;
    while(lefts[i])
            largest=left;
        if(rights[largest])
            largest=right;
        if(largest==i)
            break;
        else
            swap(s[largest],s[i]);
        left=largest*2;
        right=largest*2+1;
    }
}

void heapsort(string& s){
    for(int i=0;i0;i--)
    {
        swap(s[0],s[i]);//            
        heapify(s,0,i);
    }
    return ;
}
bool isUnique(string& s){
    int n=s.size();
    if(n==0) return false;
    heapsort(s);
    for(int i=1;i>s;){
        cout<

좋은 웹페이지 즐겨찾기