識別

DD 現在有一個長度爲 n 的字符串,DD 認爲如果所有長度爲 x 的子串互不重複,則 x 這個值是可識別的,他現在想知道最小的可識別值是多少

輸入格式
第一行一個整數表示 n

第二行一個長度爲 n 的字符串

輸出格式
輸出 xx 的最小值

數據範圍
對於 30% 的數據,1≤n≤10

對於 60% 的數據,1≤n≤100

對於 100% 的數據,1≤n≤1000

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入 複製
6
xyzxyz
樣例輸出 複製
4

#include<bits/stdc++.h>
using namespace std;
#define N 10005
int n, lens;
string s, tmp[1005];
bool cmp(int x){//找出所有長度爲x的字符串
	int k = 0;
	for(int i=1; i<=lens; ++i)//所有字符串清空
		tmp[i] = "";
	for(int i=0; i<lens; ++i){//每一個字符串的開始下標
		++k;
		if(x+i <= lens){
			for(int p=i; p<x+i; p++)//每個字符串的形成
				tmp[k] += s[p];
		}else
			break;
	}
	sort(tmp+1, tmp+k+1);
	for(int i=1; i<=k; ++i){//判斷是否有相等字符串
		if(tmp[i] == tmp[i+1])
			return false;
	}	
	return true;
}
int main(){ 
	scanf("%d", &n);
	cin >> s;
	lens = s.size();
	for(int j=1; j<=lens; ++j){
		if(cmp(j)){
			cout << j;
			break;
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章