判斷字符串中是否所有的字符都只出現過一次

#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool isUnique1(string str)
{
    vector<bool> nmap(256);
    for(int i = 0; i < str.size(); ++i)
    {
         if(nmap[str[i]])
            return false;
        nmap[str[i]] = true;
    }
    return true;
}
void swaps(string & str, int index1, int index2)
{
    char temp = str[index1];
    str[index1] = str[index2];
    str[index2] = temp;
}
void heapify(string& str, int i, int size)
{
    int left = i * 2 + 1;
    int right = i * 2 + 2;
    int largest = i;
    while(left < size)
    {
        if(str[left] > str[i])
            largest = left;
        if(right < size && str[right] > str[largest])
            largest = right;

        if(largest != i)
            swaps(str, i, largest);
        else
            break;

        i = largest;
        left = i * 2 + 1;
        right = i * 2 + 2;
    }
}
void heapInsert(string& str, int i)
{
    int parent = 0;
    while(i != 0)
    {
        parent = (i - 1) / 2;
        if(str[parent] < str[i])
        {
            swaps(str, parent, i);
            i = parent;
        } else {
            break;
        }
    }
}
void heapSort(string& str)
{
        for(int i = 0; i < str.size(); ++i)
            heapInsert(str, i);

        for(int i = str.size() - 1; i > 0; --i)
        {
            swaps(str, 0, i);
            heapify(str, 0, i);
        }
}
bool isUnique2(string str)
{
    heapSort(str);
    for(int i = 1; i < str.size(); ++i)
        if(str[i] == str[i - 1])
        return false;
    return true;
}
int main()
{
    cout << isUnique1("1231") << endl;
    cout << isUnique2("1231") << endl;
    cout << isUnique1("abc") << endl;
    cout << isUnique2("abc") << endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章