/** * 二分查找,查找target,在区间[start,end]之间 * 有重复元素,返回最后一个下标 * 其他情况返回-1 */ int bisearch(vector<int> arr, int len, int target, int start, int end) { if(start <= end) { int mid = (start + end) / 2; int val = arr[mid]; if (target < val) { return bisearch(arr, len, target, start, mid - 1); } else if (target > val) { return bisearch(arr, len, target, mid + 1, end); } else { if (mid + 1 < len && arr[mid + 1] == arr[mid]) { return bisearch(arr, len, target, mid + 1, end); } return mid; } } else { return -1; } } /** * 输出字符串中的所有子串: * 例如:abcab * 输出: a, b, ab * 子串连续 */ void getAllSub(string str) { int len = str.length(); for(int i = 0; i < len; i++) { for (int j = i; j < len; j++) { string s = str.substr(i, (j - i + 1)); cout<<s.c_str()<<endl; } } }