У меня есть String s1 и String s2, пара s1 , s2 называется специальными строками, если мы можем сделать их анаграммой, удалив один символ (любое число раз) из каждой строки s1 и s2.
Пример:
s1 = safddadfs
s2 = famafmss
Result = True
Объяснение:
s1 has a=2, d=2, f=2, s=2
s2 has a=2, m=2, f=2, s=2
We can remove 'f' from s1 and remove 'm' from s2 to make them anagrams.
so s1 becomes a=2, d=2, s=2
and s2 becomes a=2, d=2, s=2
Пример:
s1 = aaabb
s2 = aabbb
Result = True
Объяснение:
s1 has a=3, b=2
s2 has a=2, b=3
We can single 'a' from s1 and remove single 'b' from s2 to make them anagrams.
so s1 becomes a=2, b=2
and s2 becomes a=2, b=2
Пример:
s1 = aab
s2 = ab
Result = True
Объяснение:
s1 has a=2, b=1
s2 has a=1, b=1
We can single 'a' from s1 and nothing from s2 to make them anagrams.
so s1 becomes a=1, b=1
and s2 becomes a=1, b=1
Я пытался реализовать этот код, но он не удался для тестового примера, где s1 = "aaabb" и s2 = "aabb"
Я не могу понять правильную логику, чтобы это исправить.
import java.util.*;
public class Main {
public static boolean solve(String s1, String s2) {
Map m1 = getCountMap(s1);
Map m2 = getCountMap(s2);
boolean valid = canBeAnagrams(m1, m2);
if(!valid) {
valid = canBeAnagrams(m2, m1);
}
return valid;
}
private static boolean canBeAnagrams(Map m3, Map m4) {
int count = 0;
Map m1 = new HashMap(m3), m2 = new HashMap(m4);
for(char c : m1.keySet()) {
int v1 = m1.get(c);
int v2 = m2.getOrDefault(c,0);
if(v1 != v2) {
count++;
}
m2.remove(c);
if(count > 1) return false;
}
if(m2.size() > 1) return false;
return true;
}
private static Map getCountMap(String s) {
Map countMap = new HashMap();
for (char c : s.toCharArray()) {
countMap.put(c, countMap.getOrDefault(c, 0) + 1);
}
return countMap;
}
public static void main(String[] args) {
System.out.println(solve("safddadfs", "famafmss")); // Should print [True]
System.out.println(solve("aaabb", "aabbb")); // Should print [True], but getting false
System.out.println(solve("aab", "ab")); // Should print [True]
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... e-anagrams
Выяснение того, могут ли строки быть анаграммами ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1721889278
Anonymous
У меня есть String s1 и String s2, пара s1 , s2 называется специальными строками, если мы можем сделать их анаграммой, удалив один символ (любое число раз) из каждой строки s1 и s2.
[b]Пример:[/b]
s1 = safddadfs
s2 = famafmss
Result = True
[b]Объяснение:[/b]
s1 has a=2, d=2, f=2, s=2
s2 has a=2, m=2, f=2, s=2
We can remove 'f' from s1 and remove 'm' from s2 to make them anagrams.
so s1 becomes a=2, d=2, s=2
and s2 becomes a=2, d=2, s=2
[b]Пример:[/b]
s1 = aaabb
s2 = aabbb
Result = True
[b]Объяснение:[/b]
s1 has a=3, b=2
s2 has a=2, b=3
We can single 'a' from s1 and remove single 'b' from s2 to make them anagrams.
so s1 becomes a=2, b=2
and s2 becomes a=2, b=2
[b]Пример:[/b]
s1 = aab
s2 = ab
Result = True
[b]Объяснение:[/b]
s1 has a=2, b=1
s2 has a=1, b=1
We can single 'a' from s1 and nothing from s2 to make them anagrams.
so s1 becomes a=1, b=1
and s2 becomes a=1, b=1
Я пытался реализовать этот код, но он не удался для тестового примера, где s1 = "aaabb" и s2 = "aabb"
Я не могу понять правильную логику, чтобы это исправить.
import java.util.*;
public class Main {
public static boolean solve(String s1, String s2) {
Map m1 = getCountMap(s1);
Map m2 = getCountMap(s2);
boolean valid = canBeAnagrams(m1, m2);
if(!valid) {
valid = canBeAnagrams(m2, m1);
}
return valid;
}
private static boolean canBeAnagrams(Map m3, Map m4) {
int count = 0;
Map m1 = new HashMap(m3), m2 = new HashMap(m4);
for(char c : m1.keySet()) {
int v1 = m1.get(c);
int v2 = m2.getOrDefault(c,0);
if(v1 != v2) {
count++;
}
m2.remove(c);
if(count > 1) return false;
}
if(m2.size() > 1) return false;
return true;
}
private static Map getCountMap(String s) {
Map countMap = new HashMap();
for (char c : s.toCharArray()) {
countMap.put(c, countMap.getOrDefault(c, 0) + 1);
}
return countMap;
}
public static void main(String[] args) {
System.out.println(solve("safddadfs", "famafmss")); // Should print [True]
System.out.println(solve("aaabb", "aabbb")); // Should print [True], but getting false
System.out.println(solve("aab", "ab")); // Should print [True]
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78789778/finding-if-strings-can-be-anagrams[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия