Вопрос. Строка называется квадратной строкой, если ее можно получить, объединив две копии одной и той же строки. Например, «abab», «aa» являются квадратными строками, а «aaa», «abba» - нет. Если задана строка, сколько подпоследовательностей строки являются квадратными строками? Подпоследовательность строки может быть получена путем удаления из нее нулей или более символов и сохранения относительного порядка остальных символов.Квадратные подпоследовательности
Входной формат
Первая строка содержит число тестовых примеров, Т. Т тестовые примеры следуют. Каждый случай содержит строку, S.
Формат вывода
Т выходных линий, по одному для каждого теста, содержащие требуемый ответ по модулю 1000000007.
Ограничения: 1≤T≤20 S будет имеют не более 200 символов нижнего регистра ('a' - 'z').
Пример ввода
3
aaa
abab
baaba
Пример вывода
3
3
6
Мой код передается только 2 тестовых случаев из-за рекурсии для больших строк, которые оно предпринимает более 4 секунд, чтобы генерировать ответ, чтобы тестовые примеры были не прошел
Первоначально я предполагаю получить все возможные подпоследовательности, а затем я проверю, является ли производная подпоследовательность квадратной подпоследовательностью или нет
Может кто-нибудь дать мне лучшее представление о том, чтобы решить эту проблему без фактического создания суб-последовательности
import java.io.*;
import java.util.*;
public class Subsequence {
static int count;
public static void print(String prefix, String remaining, int k) {
if (k == 0) {
//System.out.println(prefix);
if(prefix.length() %2 == 0 && check(prefix) != 0 && prefix.length() != 0)
{
count++;
//System.out.println(prefix);
}
return;
}
if (remaining.length() == 0)
return;
print(prefix + remaining.charAt(0), remaining.substring(1), k-1);
print(prefix, remaining.substring(1), k);
}
public static void main(String[] args)
{
//String s = "aaa";
Scanner sc = new Scanner(System.in);
int t=Integer.parseInt(sc.nextLine());
while((t--)>0)
{
count = 0;
String s = sc.nextLine();
for(int i=0;i<=s.length();i++)
{
print("",s,i);
}
System.out.println(count);
}
}
public static int check(String s)
{
int i=0,j=(s.length())/2;
for(;i<(s.length())/2 && j < (s.length());i++,j++)
{
if(s.charAt(i)==s.charAt(j))
{
continue;
}
else
return 0;
}
return 1;
}
}
он говорит: S будет содержать не более 200 символов нижнего регистра ('a' - 'z'). Если вы хотите найти все комбинации из 200 символов, вам сначала нужно быть бессмертным. Но тогда задача завершилась бы –