C++中首尾元素相同的子数组的最大长度
在这个问题中,我们得到一个字符数组。我们的任务是创建一个C++程序来打印首尾元素相同的子数组的最大长度。
让我们来看一个例子来理解这个问题:
输入 − array = {‘t’, ‘u’, ‘t’, ‘o’, ‘r’, ‘i’, ‘a’, ‘l’, ‘s’, ‘p’, ‘o’, ‘i’, ‘n’, ‘t’ }
输出 − 14
解释 −
子数组 {‘t’, ‘u’, ‘t’, ‘o’, ‘r’, ‘i’, ‘a’, ‘l’, ‘s’, ‘p’, ‘o’, ‘i’, ‘n’, ‘t’ } 以t开头并以t结尾。
为了解决这个问题,我们找到字符在数组中的第一次和最后一次出现,然后使用公式:
子数组长度 = lastOccurrence - firstOccurrence + 1
我们将找到所有结果中的最大长度。
让我们解决一个例子来理解解决方案:
数组 = {a, b , a , c , b, a}
元素a,第一次出现于索引0,最后一次出现于索引5
子数组长度 = 5 - 0 + 1= 6
maxLength = 6
元素b,第一次出现于索引1,最后一次出现于索引4
子数组长度 = 4 - 1 + 1 = 4
maxLength = 6
示例
打印首尾元素相同的子数组的最大长度的程序:
#include <iostream> using namespace std; int maxSubArrLength(string arr, int n){ int firstOccurrence, lastOccurrence = -1; int maxlength = 0; char ch; for (int i = 0; i < n; i++){ ch = arr[i]; firstOccurrence = lastOccurrence = i; for(int j = i; j<n; j++){ if(arr[j] == ch) lastOccurrence = j; } maxlength = max(maxlength, (lastOccurrence - firstOccurrence + 1)); } return maxlength; } int main(){ string arr = "tutorialsPoint"; int n = arr.length(); cout<<"The maximum length of subarray whose first and last elements are same is "<<maxSubArrLength(arr, n); return 0; }
输出
The maximum length of subarray whose first and last elements are same is 14
广告