用于int数组的Preffix_Suffix [编程]

时间:2013-09-10 13:52:27

标签: java algorithm

我有int数组int[] A = {3, 5, 7, 3, 3, 5};

根据定义:

  

prefix_suffix_set是一对索引(P, S)0 ≤ PS < N   这样:

     
      
  • 序列A[0], A[1], ..., A[P]中出现的每个值也出现在序列A[S], A[S + 1], ..., A[N − 1]中,
  •   
  • 序列A[S], A[S + 1], ..., A[N − 1]中出现的每个值也出现在序列A[0], A[1], ..., A[P]中。
  •   

我的问题是:前缀后缀列表是哪个?

2 个答案:

答案 0 :(得分:1)

C ++中的代码:

#include <iostream>
#include <set>

using std::set;
using std::cout;
using std::endl;

int main() {

  int A[6] = { 3, 5, 7, 3, 3, 5 };

  int countPS = 0;

  for ( int i = 1; i <= 6; i++ ) {

    set<int> P;
    P.insert( A , A + i );

    for ( int j = 5; j >= 0; j-- ) {

       set<int> S;
       S.insert( A + j, A + 6 );

       if ( P == S )
          countPS++;
    } 
  }
  cout << "The number of elements in list (P,S) = " << countPS << endl;

  return 0;
}

节目输出:

Success time: 0 memory: 3476 signal:0
The number of elements in list (P,S) = 14

http://ideone.com/8adJ1A

答案 1 :(得分:1)

可能的解决方案是:

(P,S) -- prefix set - suffix set
(1,4) -- {3,5} - {3,5}
(1,3) -- {3,5} - {3,5} 
(2,2) -- {3,5,7} - {3,5,7}

由于不需要P <= S,因此也允许这些(否则将被排除):

(2,1) -- the same as above, just having all the possibilities
(2,0) -- where P >= 2 and S <=2
(3,2) 
(3,1) 
(3,0)
(4,2)
(4,1)
(4,0)
(5,2)
(5,1)
(5,0)

因此,结果是具有上述元组的集合。我认为N6,就像数组的大小一样。