#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;
}
判斷字符串中是否所有的字符都只出現過一次
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.