/**
* 二分查找,查找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;
}
}
}
}