Выяснение того, могут ли строки быть анаграммамиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Выяснение того, могут ли строки быть анаграммами

Сообщение Anonymous »

У меня есть 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»