对字符串进行二进制搜索
给定一个已排序的字符串数组和一个字符串 x,如果 x 存在于数组中,则找到它的索引。
例子:
Input : arr[] = {"contribute", "geeks", "ide", "practice"}, x = "ide"
Output : 2
The String x is present at index 2.
Input : arr[] = {"contribute", "geeks", "ide", "practice"}, x = "zz"
Output : -1
The String "zz" is not present.
先决条件:二分查找、 Java中的字符串比较
这个想法是将 x 与给定数组中的中间字符串进行比较。如果匹配,则返回mid,否则如果小于mid,则在左半部分搜索,否则在右半部分搜索。
C++
// CPP program to implement Binary Search for strings
#include
using namespace std;
// Returns index of x if it is present in arr[],
// else return -1
int binarySearch(string arr[], string x,int n)
{
int l = 0 ;
int r = n - 1;
while (l <= r)
{
int m = l + (r - l) / 2;
int res = -1000; //some random value assigned because if res is already 0 then
//it will always return 0
if (x == (arr[m]))
res = 0;
// Check if x is present at mid
if (res == 0)
return m;
// If x greater, ignore left half
if (x > (arr[m]))
l = m + 1;
// If x is smaller, ignore right half
else
r = m - 1;
}
return -1;
}
// Driver code
int main()
{
string arr[] = { "contribute", "geeks", "ide", "practice"};
string x = "ide";
int n = 4;
int result = binarySearch(arr, x,n);
if (result == -1)
cout << ("Element not present");
else
cout << ("Element found at index ") << result;
}
// This code is contributed by
// Shashank_Sharma
Java
// Java program to implement Binary Search for strings
class GFG {
// Returns index of x if it is present in arr[],
// else return -1
static int binarySearch(String[] arr, String x)
{
int l = 0, r = arr.length - 1;
while (l <= r) {
int m = l + (r - l) / 2;
int res = x.compareTo(arr[m]);
// Check if x is present at mid
if (res == 0)
return m;
// If x greater, ignore left half
if (res > 0)
l = m + 1;
// If x is smaller, ignore right half
else
r = m - 1;
}
return -1;
}
// Driver method to test above
public static void main(String []args)
{
String[] arr = { "contribute", "geeks", "ide", "practice"};
String x = "ide";
int result = binarySearch(arr, x);
if (result == -1)
System.out.println("Element not present");
else
System.out.println("Element found at "
+ "index " + result);
}
}
Python3
# Python3 program to implement Binary
# Search for strings
# Returns index of x if it is present
# in arr[], else return -1
def binarySearch(arr, x):
l = 0
r = len(arr)
while (l <= r):
m = l + ((r - l) // 2)
res = (x == arr[m])
# Check if x is present at mid
if (res == 0):
return m - 1
# If x greater, ignore left half
if (res > 0):
l = m + 1
# If x is smaller, ignore right half
else:
r = m - 1
return -1
# Driver Code
if __name__ == "__main__":
arr = ["contribute", "geeks",
"ide", "practice"];
x = "ide"
result = binarySearch(arr, x)
if (result == -1):
print("Element not present")
else:
print("Element found at index" ,
result)
# This code is contributed by ita_c
C#
// C# program to implement Binary Search for strings
using System;
class GFG {
// Returns index of x if it is present in arr[],
// else return -1
static int binarySearch(String[] arr, String x)
{
int l = 0, r = arr.Length - 1;
while (l <= r) {
int m = l + (r - l) / 2;
int res = x.CompareTo(arr[m]);
// Check if x is present at mid
if (res == 0)
return m;
// If x greater, ignore left half
if (res > 0)
l = m + 1;
// If x is smaller, ignore right half
else
r = m - 1;
}
return -1;
}
// Driver method to test above
public static void Main(String []args)
{
String[] arr = { "contribute", "geeks", "ide", "practice"};
String x = "ide";
int result = binarySearch(arr, x);
if (result == -1)
Console.WriteLine("Element not present");
else
Console.WriteLine("Element found at "
+ "index " + result);
}
// This code is contributed by Ryuga
}
PHP
0)
$l = $m + 1;
// If x is smaller, ignore right half
else
$r = $m - 1;
}
return -1;
}
// Driver Code
$arr = array("contribute", "geeks",
"ide", "practice");
$x = "ide";
$result = binarySearch($arr, $x);
if ($result == -1)
print("Element not present");
else
print("Element found at index " .
$result);
// This code is contributed by mits
?>
Javascript
输出:
Element found at index 2