Вычитанием строк назовем операцию при которой все буквы вычитаемого вычеркиваются из уменьшаемого, а если в уменьшаемом таких букв не было они дописываются в конец уменьшаемого в порядке обхода вычитаемого от 0 индекса к последнему.
Например: abcdef - abcfonpq = deonpq или abcdef - fedcloj = abloj или abcdef - fealobjm = cdlojm
Пример:
Ввод 1: abcdef abcfonpq
Вывод 1: deonpq
Ввод 2: abcdef fedcloj
Вывод 2: abloj
Вроде с точки зрения логики стараюсь все делать правильно, но результат нужный не получается. Подскажите, что в моем коде нужно поправить чтоб заработало?
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
String text;
LinkedHashSet<Character> temp = new LinkedHashSet<>();
text = in.nextLine();
text = text.replace(" ", "");
for (int i = 0; i < text.length(); i++) {
if (temp.add(text.charAt(i))) {
sb.append(text.charAt(i));
}
}
System.out.println(sb);
}
Надо создать постфикс, в который будет добавляться символ, если он отсутствует в первой строке, если символ в первой строке присутствует, то из обеих строчек этот символ удаляется.
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] strings = scanner.nextLine().split(" ");
StringBuilder postfix = new StringBuilder();
for (int i = 0; i < strings[1].length();) {
char c = strings[1].charAt(i);
if(strings[0].indexOf(c) != -1) {
strings[0] = strings[0].replaceFirst(""+c,"");
strings[1] = strings[1].replaceFirst(""+c,"");
} else {
postfix.append(c);
i++;
}
}
strings[0] += postfix;
System.out.println(strings[0]);
}
Второй вариант цикла for (очевидно, более простой и быстрый):
for (int i = 0; i < strings[1].length(); i++) {
char c = strings[1].charAt(i);
if(strings[0].indexOf(c) != -1)
strings[0] = strings[0].replaceFirst(""+c,"");
else
postfix.append(c);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String text1 = in.nextLine();
String text2 = in.nextLine();
Set<Integer> set = text2.chars()
.boxed()
.collect(Collectors.toCollection(LinkedHashSet::new));
Set<Integer> set1 = text1.chars()
.filter(ch -> !set.remove(ch))
.boxed()
.collect(Collectors.toCollection(LinkedHashSet::new));
String result = Stream.of(set1,set).flatMap(s->s.stream())
.mapToInt(Integer::intValue)
.mapToObj(i->(char)i)
.map(String::valueOf)
.collect(Collectors.joining());
System.out.println(result);
}
Можно сделать просто в лоб как описано в условии:
String s1 = "abba";
String s2 = "abbba";
String result = s1;
for (int i = 0; i < s2.length(); i++) {
String l = s2.substring(i, i + 1);
if (s1.contains(l)) {
s1 = s1.replaceFirst(l, "");
result = result.replaceFirst(l, "");
} else {
result += l;
}
}
System.out.println(result);
UPD. будет работать и для повторяющихся символов
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Есть приложение на Spring boot 2, в котором пользователи авторизуюца и получают access keyКлиентская часть крутится на nodejs