package com.interview.algorithms.string; /** * Created_By: stefanie * Date: 14-10-19 * Time: 上午11:00 */ public class C11_32_SearchInInterspersedStrings { public static int search(String[] strs, String key){ return search(strs, key, 0, strs.length - 1); } private static int search(String[] strs, String key, int low, int high) { if(low > high) return -1; int mid = (low + high) / 2; if(strs[mid].equals("")){ int adjMid = adjustMiddle(strs, mid, low, high); if(adjMid == mid) return -1; else mid = adjMid; } if(strs[mid].compareTo(key) == 0){ return mid; } else if(strs[mid].compareTo(key) > 0){ return search(strs, key, low, mid - 1); } else return search(strs, key, mid + 1, high); } private static int adjustMiddle(String[] strs, int mid, int low, int high){ int offset = 1; while(true){ if(mid + offset > high && mid - offset < low) return mid; if(mid + offset <= high && !strs[mid + offset].equals("")) return mid + offset; if(mid - offset >= low && !strs[mid - offset].equals("")) return mid - offset; offset++; } } }