演算法提高 11-2刪除重複元素

一名路過的小碼農啊發表於2017-03-27
  演算法提高 11-2刪除重複元素  
時間限制:10.0s   記憶體限制:256.0MB
    
問題描述
  為庫設計新函式DelPack,刪除輸入字串中所有的重複元素。不連續的重複元素也要刪除。
  要求寫成函式,函式內部使用指標操作。
樣例輸入
1223445667889
樣例輸出
13579
樣例輸入
else
樣例輸出
ls
資料規模和約定
  字串陣列最大長度為100。
想到的第一個是用map做,能夠去掉重複元素,但是我忘記了map有自動排序的功能,好吧,之前是覺得只有set有呢,後來只能把它存到一個vector陣列裡,如果發現有重複的元素,就用vector的函式erase去掉,用#include<algorithm>中的find函式找到這個s[i],去掉就可以了,這題真是充分複習了stl庫,汗顏。
用map做的自動排序:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	string s;
	cin>>s;
	map<char,int> m;
	for(int i=0;i<s.length();i++)
	{
	    m[s[i]]++;
	}
	map<char,int>::iterator it;
	for(it=m.begin();it!=m.end();it++)
	{
		if(it->second==1)
		{
			printf("%c",it->first);
		}
	}
	return 0;
}
ac程式碼如下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	string s;
	cin>>s;
	map<char,int> m;
	vector<char>b;
	for(int i=0;i<s.length();i++)
	{
	    if(m[s[i]]==0)
	    {
	    	b.push_back(s[i]);
	    	m[s[i]]=1;
		}
		else
		{
			b.erase(find(b.begin(),b.end(),s[i]));
		}
	}
	for(int i=0;i<b.size();i++)
	{
		printf("%c",b[i]);
	}
	return 0;
}


相關文章