我發現CareerCup類似的面試問題,唯一的區別是它的整數,而不是一個字符數組。我借用了一個想法並做了一些修改,在閱讀完C++代碼後,如果您有任何疑問,請告訴我。
我在這裏要做的是:main
函數中的for
循環用於遍歷給定數組的所有元素,並找到我遇到子陣列第一個元素的位置,一旦找到,我稱之爲find_subsequence
函數,其中我遞歸匹配給定數組的元素與子數組在同一時間保留元素的順序。最後,find_subsequence
返回位置,我計算子序列的大小。
請原諒我的英文,希望我能更好地解釋它。
#include "stdafx.h"
#include "iostream"
#include "vector"
#include "set"
using namespace std;
class Solution {
public:
int find_subsequence(vector<int> s, vector<int> c, int arrayStart, int subArrayStart) {
if (arrayStart == s.size() || subArrayStart ==c.size()) return -1;
if (subArrayStart==c.size()-1) return arrayStart;
if (s[arrayStart + 1] == c[subArrayStart + 1])
return find_subsequence(s, c, arrayStart + 1, subArrayStart + 1);
else
return find_subsequence(s, c, arrayStart + 1, subArrayStart);
}
};
int main()
{
vector<int> v = { 1,5,3,5,6,7,8,5,6,8,7,8,0,7 };
vector<int> c = { 5,6,8,7 };
Solution s;
int size = INT_MAX;
int j = -1;
for (int i = 0; i <v.size(); i++) {
if(v[i]==c[0]){
int x = s.find_subsequence(v, c, i-1, -1);
if (x > -1) {
if (x - i + 1 < size) {
size = x - i + 1;
j = i;
}
if (size == c.size())
break;
}
}
}
cout << size <<" "<<j;
return 0;
}
請問您能解釋一下代碼嗎? – Shweta 2014-08-28 15:22:52
你至少應該解釋你的方法,如果不是代碼。 – Khatri 2015-10-27 04:41:29