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

更新於:2020年6月3日

276 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.