2014-02-17 2 views
0

Как я могу соответствовать слова из строкиполучить два общих слов из двух строки

input: 
bcdaa 
bcdca 

output: 
bcda 

input: 
iamaman 
iamaboy 

output: 
iama 

я по сравнению с двумя строки таким путем

Set<String> set1= new HashSet<String>(Arrays.asList(s1.split("(?!^)"))); 
set1.retainAll(Arrays.asList(s2.split("(?!^)"))); 

Но, это не обеспечивает правильного результата , Теперь, как я могу это достичь?

+0

Что именно вы пытаетесь сделать? Ваши примеры не дают понять. Я думаю, вы хотите найти самые длинные или все общие подстроки из двух строк, но 'bcda' не является частью' bcdaa' и 'bcdca'. Просьба уточнить или исправить это. Если вы пытаетесь сопоставить все, то не будет правильным результатом первого примера: '{b, c, d, a, bc, bcd, cd}'? – turbo

+0

http://en.wikipedia.org/wiki/Longest_common_substring_problem – Tyler

+0

Знание того, как вы определяете правильный результат, очень поможет. – biziclop

ответ

0

Если я понимаю ваш вопрос, вы хотите сравнить слово в строках. Для этого вы можете разделить свою первую строку, используя пробел как регулярное выражение с String.split(), тогда вы проверяете, содержит ли вторая строка это слово, используя String.contains(). Как это:

String[] temp = string1.split(" "); 
for(string x : temp){ 
if(string2.contains(x))System.println(x); 
} 
0

Это общая проблема строки известен как длинная общая последовательность к югу. Вы можете найти дополнительную информацию о проблеме http://en.wikipedia.org/wiki/Longest_common_subsequence_problem Кроме того, если вы хотите, чтобы алгоритм ее решения, вы можете найти здесь решение: http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_subsequence#Java Он написан на разных языках, кроме Java.

Это решение является примером алгоритмов динамического программирования, если вас интересует эта категория алгоритмов. Надеюсь, вы найдете этот ответ полезным.

Это также более четкое и прямое решением от http://rosettacode.org/wiki/Longest_common_subsequence

public static String lcs(String a, String b) { 
int[][] lengths = new int[a.length()+1][b.length()+1]; 

// row 0 and column 0 are initialized to 0 already 

for (int i = 0; i < a.length(); i++) 
    for (int j = 0; j < b.length(); j++) 
     if (a.charAt(i) == b.charAt(j)) 
      lengths[i+1][j+1] = lengths[i][j] + 1; 
     else 
      lengths[i+1][j+1] = 
       Math.max(lengths[i+1][j], lengths[i][j+1]); 

// read the substring out from the matrix 
StringBuffer sb = new StringBuffer(); 
for (int x = a.length(), y = b.length(); 
    x != 0 && y != 0;) { 
    if (lengths[x][y] == lengths[x-1][y]) 
     x--; 
    else if (lengths[x][y] == lengths[x][y-1]) 
     y--; 
    else { 
     assert a.charAt(x-1) == b.charAt(y-1); 
     sb.append(a.charAt(x-1)); 
     x--; 
     y--; 
    } 
} 

return sb.reverse().toString(); 
} 
0

Надеется, что это помогает:

String str1 = "bcdaa"; 
    String str2 = "bcdca"; 
    String strbuilder = ""; 

    char[] first = str1.toLowerCase().toCharArray(); 
    char[] second = str2.toLowerCase().toCharArray(); 

    int minLength = Math.min(first.length, second.length); 

    for (int i = 0; i < minLength; i++) { 
     if (first[i] == second[i]) { 
      strbuilder += String.valueOf(first[i]); 

     } 
    } 
    System.out.println(strbuilder); 
Смежные вопросы