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

6 篇文章 0 订阅
3 篇文章 0 订阅

移除连续重复元素

#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));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值