移除连续重复元素
#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));
}