2014-12-29 2 views
0

Я задал вопрос экзамена:Союза струнного Java

Напишите программу для чтения два строковых значений, и найти пересечение и объединение множеств введенных символов строки. Например.

  • str1: "Hi hello"
  • str2: "How are you"
  • Союз: "hielowaryu"
  • Пересечения: "hoe" (случай insenstive)

Это был Java 101 Конечно, так мы weren» t должен использовать что-то большее, чем абсолютные основы (без передовых структур данных). Я не мог сделать это в течение отведенного времени, но я хотел бы знать, как это решить.

+0

Это может быть сделано с использованием для петли, Шара(), «==» и т.д. –

+2

Ну, что вы пытаетесь делать? –

+0

Пожалуйста, поделитесь своим подходом и фрагментом кода, чтобы мы могли помочь вам, а не просто дать простой ответ. Также было бы достаточно algo. – thepace

ответ

4

Абсолютно самый простой способ: пропустить первую строку, проверить ее защиту во втором. Похоже, что ваш союз и пересечение не должны иметь дубликатов (если это может быть гораздо сложнее).

/** Returns the union of the two strings, case insensitive. 
    Takes O((|S1| + |S2|) ^2) time. */ 
public static String union(String s1, String s2){ 
    String s = (s1 + s2).toLowerCase(); //start with entire contents of both strings 
    int i = 0; 
    while(i < s.length()){ 
     char c = s.charAt(i); 
     if(i != s.lastIndexOf(c)) //If c occurs multiple times in s, remove first one 
      s = s.substring(0, i) + s.substring(i+1, s.length()); 
     else i++; //otherwise move pointer forward 
    } 
} 

/** Returns the intersection of the two strings, case insensitive. 
    Takes O(|S1| * |S2|) time. */ 
public static String intersect(String s1, String s2){ 
    String s = ""; 
    s2 = s2.toLowerCase(); 
    for(char c : s1.toLowerCase().toCharArray()){ 
     if(s2.indexOf(c) != -1 && s.indexOf(c) == -1) 
      s += c; 
    } 
    return s; 
} 
+0

Я немного смущен. Как методы цепочки работают в методе пересечения? Получается ли s1 в нижнем регистре, а затем в Chararray? Или char [] имеет строчный метод? Просто спрашивайте, не знаю много. – salmonlawyer

+0

Ваш первый инстинкт был прав - метод '' lowerCase() 'возвращает новую строку, состоящую из строчных версий символов в исходной строке. Итак, если 's1 =" HeLlo ",' s1.toLowerCase(). ToCharArray() 'is' "HeLlo" -> "hello" -> {'h', 'e', ​​'l', 'l', 'о'} ' – Mshnik