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