2017-01-17 2 views
-2

Это решение этой Hackerrank QuestionJAVA Оптимизировать символ [] для преобразования струнного

String b = new String(in.nextLine()); 
char[] bCharArray = b.toCharArray(); 
for (int i = 0; i < n - 2; i++) { 
    if (b.substring(i, i + 3).matches("010")) { 
    bCharArray[i + 2] = '1'; 
    b = new String(bCharArray); 
    counter++; 
    } 
} 

В настоящее время в течение части цикла, каждый раз, когда создается новый экземпляр для струнного б. Есть ли лучший способ реализовать оптимизированный char [] для преобразования String?

+0

Подождите ... Вы никогда не думали о создании этой строки *** вне *** петли? Разве это не самое обычное изменение? – Tom

+0

нет ... это бесполезно ... мне нужно сохранить изменения в строке на каждой итерации –

+0

Нет, вы этого не сделали, и первый ответ вам сказал то же самое. – Tom

ответ

2

Вместо того, чтобы создавать новую строку на каждой итерации, как насчет работы с исходным массивом символов, и только когда вы закончите изменять символы, вы можете скопировать его в строку (если это то, что вы хотите).

Вот альтернативный код:

String b = new String(in.nextLine()); 
char[] bCharArray = b.toCharArray(); 
for (int i = 0; i < n - 2; i++) { 
    if(bCharArray[i] == '0' && bCharArray[i+1] == '1' && bCharArray[i+2] == '0') 
    { 
    bCharArray[i+2] = '1'; 
    } 
} 
+0

это хорошо. но я думаю, что это занимает больше времени, поскольку на каждой итерации есть много сравнений. Не так ли? –

+2

@AnuShibinJosephRaj Считаете ли вы, что создание подстроки и компиляция регулярного выражения происходит бесплатно? – Tom

+0

ohh ... извините, не подумал об этом;) –