C++移除型算法之移除重复元素

我只是一个虾纸丫 提交于 2020-01-15 04:54:25

移除连续重复元素

#include "algostuff.hpp"//.h和.cpp写在一起的文件
using namespace std;
int main()
{
	int source[] = {1,4,4,6,1,2,2,3,1,6,6,6,5,7,5,4,4};
	list<int> coll;
	copy(begin(source),end(source),back_inserter(coll));
	PRINT_ELEMENTS(coll);
	auto pos = unique(coll.begin(),coll.end());
	copy(coll.begin(),pos,ostream_iterator<int>(cout," "));
	cout<<"\n\n";
	copy(begin(source),end(source),coll.begin());
	PRINT_ELEMENTS(coll);
	coll.erase(unique(coll.begin(),coll.end(),greater<int>()),coll.end());
	PRINT_ELEMENTS(coll);
}

判断B是否是A的子串,并返回B在A中第一次出现的位置
转自公众号“程序员小灰”

public static int rabinKarp(String str, String pattern)
{
	int m = str.length();
	int n = pattern.length();
	int patternCode = hash(pattern);
	int strCode = hash(str.substring(0,n));
	for(int i = 0; i<m-n+1; i++)
	{
		if(strCode == patternCode && compareString(i,str,pattern)){
		return i;
		}
		if(i <m-n){
			strCode = nextHash(str,strCode,i,n);
		}
	}
	return -1;
}
private static int hash(String str){
	int hashcode = 0;
	for(int i = 0; i<str.length(); i++)
	{
		hashcode += str.charAt(i) - 'a';
	}
	return hashcode;
}
private static int nextHash(String str, int hash,int index,int n){
	hash -= str.charAt(index) - 'a';
	hash += str.charAt(index + n)  - 'a';
	return hash;
}
private static boolean compareString(int i,String str,String pattern)
{
	String strSub = str.substring(i,i+pattern.length());
	return strSub.equals(pattern);
}
pubilc static void main(String[] args){
	String str = "aacdesadfae";
	String pattern = "adsdf";
	System.out.printIn("第一次出现的位置:" + rabinKarp(str,pattern));
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!