2012-06-19 3 views
0

Мне нужно найти число несоответствующих символов между двумя строками. В настоящее время я делаю это, преобразовывая строки в char Arrays и сравнивая элемент за элементом.Поиск числа несоответствий между двумя строками

Есть ли другой способ достичь вышеуказанного требования.

Примечание: рассмотрим строку в нижнем регистре

Входы:

входного

utput

Выход:

+0

Есть и другие способы, но не лучше. –

+4

Просто будьте осторожны со словами разных размеров. –

+1

Ваш вариант хорош. Какой результат для «ввода» «iAnput» вы ожидаете? – alaster

ответ

1

StringUtils в Apache commons.lang имеет method для получения Левенштейна двух строк.

+0

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

+0

@Baz, я думаю, что это будет работать лучше, так как расстояние Левенштейна определяет количество операций, необходимых для преобразования одной строки в другую, по сути, это то, что делает OP – epoch

+0

, но levenstein позволяет удалять и вставлять. это не то, чего хочет OP. он хочет, чтобы расстояние между словами было затруднено.это не значит, что я лично не предпочел бы levenstein – Baz

0

Если две строки имеют разный размер, следующий код возвращает полное несоответствие алфавитов.

Вы можете попробовать это -

String ip1 = "input"; // input1 
    String ip2 = "utput"; // input2 
    int count = 0; // difference in string 
    String ipx2 = ip2; 
    for (int j = 0; j <= ip2.length(); j++) { 
     int value = ip1.indexOf(ipx2); 
     if (value != -1) { 
      if (("").equals(ipx2)) { // if the second string is blank after continous reducing 
       count = ip1.length() + ip2.length(); 
      } else { 
       count = ip1.length() + ip2.length() - 2 * ipx2.length(); 
      } 
      break; 
     } else { 
      count = ip1.length() + ip2.length(); // if there is no match at all 
     } 
     ipx2 = ip2.substring(j); 
    } 
    System.out.println("" + count); 
} 

Вы должны проверить, является ли входы имеют какие-то данные или нет. Я не сделал этого чек.

0

//try this method 
 
String mismathes(String pt,String qt) 
 
\t { 
 
\t \t StringBuilder diff = new StringBuilder(); 
 
\t \t List<String> p1 = new ArrayList<String>(Arrays.asList(pt.split("(?!^)"))); 
 
\t \t List<String> q1 = new ArrayList<String>(Arrays.asList(qt.split("(?!^)"))); 
 
\t \t for (int i = 0; i<p1.size();i++) 
 
\t \t { 
 
\t \t \t if (q1.contains((String)p1.get(i))) 
 
\t \t \t \t \t { 
 
\t \t \t \t  q1.remove(p1.get(i)); 
 
\t \t \t \t  p1.remove(p1.get(i)); 
 
\t \t \t \t  i--; 
 
\t \t \t \t \t } 
 
\t \t } 
 
\t \t for (int i = 0 ;i<q1.size();i++) 
 
\t \t { 
 
\t \t \t m.append(q1.get(i)); 
 
\t \t } 
 
\t \t for (int i = 0 ;i<p1.size();i++) 
 
\t \t { 
 
\t \t \t m.append(p1.get(i)); 
 
\t \t } 
 
\t \t return m.toString(); 
 
\t }

0

Это так, как вы описываете, но это самый простой способ реализации:

int counter = 0; 
for(int i = 0; i < str1.length(); i++) if(str1.charAt(i) != str2.charAt(i)) counter++; 

Они могут поместиться на всего две строки кода, без явного создавая целый новый массив символов.

Смежные вопросы