Nhiệm vụ được giao là tìm một chuỗi con từ một chuỗi nhị phân nhất định và sau đó là sự khác biệt lớn nhất giữa số lượng 0 và số một.
Bây giờ chúng ta hãy hiểu những gì chúng ta phải làm bằng cách sử dụng một ví dụ -
Đầu vào
str = “10010110”
Đầu ra
2
Giải thích
Trong mảng con từ vị trí 1 đến 4 (“0010”), sự khác biệt giữa các số không và những người =3 - 1 =2 là giá trị lớn nhất có thể được tìm thấy.
Đầu vào
str = “00000”
Đầu ra
5
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Trong hàm main (), hãy tạo một chuỗi str để lưu trữ chuỗi nhị phân. Cũng khai báo anarray int arr [str.length () + 1];
-
Đặt tất cả các phần tử của arr [] =0 bằng cách sử dụng memset (arr, 0, sizeof (arr));
-
Vòng lặp từ j =1 đến j <=str.length ()
-
Kiểm tra if (memset (arr, 0, sizeof (arr)), nếu vậy thì đặt arr [j] =max (arr [j-1] -1, -1);
-
Khác đặt arr [j] =max (arr [j-1] +1,1);
-
Bên ngoài vòng lặp, in số tối đa bằng cách sử dụng * max_element (arr + 1, arr + str.length () + 1);
Ví dụ
#include<bits/stdc++.h> using namespace std; int main(){ string str = "10010110"; int arr[str.length()+1]; memset(arr,0,sizeof(arr)); for(int j=1;j<=str.length();j++){ if(str[j-1]=='1') arr[j]=max(arr[j-1]-1,-1); else arr[j]=max(arr[j-1]+1,1); } cout<<*max_element(arr+1,arr+str.length()+1); return 0; }
Đầu ra
2