题目:求字符串的最长非重复子序列。比如字符串“dabaccdeff”,它的最长非重复子序列为“dabcef”
#include<iostream>
#include <stack>
#include<stdlib.h>
using namespace std;
int NoReplicatedSubstring(char *s,int len)
{
const int tablesize=256;
char hashtable [tablesize] = {'0'};
int count=0;
for(int i=0;i<len;i++)
hashtable[s[i]]=s[i];
stack<char> c;//创建一个栈
for(int i=0;i < len;i++)
{
if(hashtable[s[i]]!='\0')
{
c.push(hashtable[s[i]]);
hashtable[s[i]]='\0';
count++;
}
}
while(!c.empty())
{
cout<<c.top();
c.pop();
}
cout<<endl;
return count;
}
void main()
{
char *s="dabaccdeff";
int len=strlen(s);
int count=NoReplicatedSubstring(s,len);
system("pause");
}
更简单的方法就是用set
#include <iostream>
#include <set>
using namespace std;
void NoReplicatedSubstring(char *s,int len)
{
set <char> HashMap;
for(int i=0;i<len;i++)
HashMap.insert(s[i]);
set <char>::iterator itr = HashMap.begin();
for(itr;itr!=HashMap.end();itr++)
cout<<*itr<<",";
};
int main()
{
char *s="dabaccdeff";
int len=strlen(s);
NoReplicatedSubstring(s,len);
system("pause");
return 0;
}