一个序列,字母两两连续,只有一个单独出现,如:aabbcdd,找到单字出现的位置,要求时间复杂度O(logN)
public static int binarySearchSingle(String s) {
char [] chars = s.toCharArray();
if(chars.length==0||chars==null)
return ' ';
int first = 0;
int last = chars.length;
while(first < last)
{
int mid = (first + last) / 2;
if(chars[mid] == chars[mid-1])//如果中间元素和左侧相等,往右侧走
first = mid + 1;
else if (chars[mid] == chars[mid+1]) // 如果中间元素和右侧相等,往左侧走
last = mid - 1;
else //如果左右都不相等,直接返回
// return chars[mid];
return mid;
}
return first;
}
public static void main(String[] args)
{
String s = "aabbcdd";
int ch = binarySearchSingle(s);
System.out.println(ch);
}