C ++中首个元素和最后一个元素相同的子数组的最大长度

在这个问题中,我们得到了一个字符数组。我们的任务是创建一个程序来打印子数组的最大长度,该子数组的第一个和最后一个元素在C ++中相同。

让我们举个例子来了解这个问题,

输入-数组= {'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开头和结尾。

为了解决这个问题,我们在数组中找到第一个和最后一个出现的字符,然后使用公式-

子数组长度= lastOccurrence-firstOccurrence + 1

我们将找到所有结果的最大长度。

让我们通过一个例子来了解解决方案,

数组= {a,b,a,c,b,a}

元素a,第一次出现在索引0,最后一次出现在索引5

子数组长度= 5-0 + 1 = 4

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 = "nhooo";
   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