Итак, у меня есть массив String, и я хотел бы видеть, есть ли у него (содержит) другие как часть String ,Java - Array of String - проверьте, является ли какой-то элемент частью другой строки (не finidng "Duplicates")
Например, рассмотрите следующий простой массив.
s[0]="Java"
s[1]="Java Programming"
s[2]="C Programming"
s[3]="C Programming is Cool"
В конце концов, я только хочу, чтобы держать
s[1]="Java Programming"
s[3]="C Programming is Cool"
, потому что с [1] содержит s [0] и s [3] содержит с [2].
Это мой код, чтобы обнаружить, если элемент массива содержит элемент массива с помощью метода String.Contains(), который, кажется, на самом деле основной и неэффективное ..
int startPtr = 0;
while (startPtr < s.length-1) {
int tempPtr = startPtr+1;
while (tempPtr <= s.length-1) {
if (s[tempPtr].contains(s[startPtr])) {
//At this point, I know that I don't need s[startPtr] in result.
//Remove item at startPtr, if this were ArrayList or something.
startPtr++;
break;
} else { indexPtr++; }
}
И после того, как startPtr достигает конца, я думаю, что я должен делать то же самое в обратном порядке (начинать с конца и проверять на начало массива), чтобы гарантировать, что никакая строка не является частью другого строкового элемента.
Может ли кто-нибудь помочь мне с лучшим алгоритмом? Кроме того, я считаю, что это alogirthm будет иметь O (N^2), я прав?
Верно ли это? его O (N^2) * O (время для сравнения строк). – v78
Вам нужно будет подумать о чем-то очень умном, чтобы получить лучшую производительность с большим O. В основном вам нужно сравнить каждую строку со всеми другими строками, которые по сути принимают квадратное число вызовов 'contains()'. –
@Jay важно сохранить результат в том же массиве и в тех же позициях/порядке? – mapeters