/**
* 二分查找,查找target,在区间[start,end]之间
* 有重复元素,返回最后一个下标
* 其他情况返回-1
*/
int bisearch(vector<int> arr, int len, int target, int start, int end)
{
	if(start>end)return -1;
	while(start<end-1)
	{
		int mid=start+((end-start)>>1);
		if(arr[mid]>target)end=mid-1;
		else start=mid;
	}
	if(arr[end]==target)return end;
	else if(arr[start]==target)return start;
	else return -1;
}

/**
* 输出字符串中的所有重复子串:
* 例如:abcab
* 输出: a, b, ab
*
*/

void getAllSub(string str)
{
	for(int len=1;len<str.size();++len)
	{
		unordered_map<string,bool> map;
		for(int i=0;i+len-1<str.size();++i)
		{
			string s=str.substr(i,len);
			if(map.find(s)==map.end())map[s]=true;
			else if(map[s])
			{
				cout<<s<<' ';
				map[s]=false;
			}
		}
	}
}