2014-01-15 4 views
1

Ищете идеи о том, как это сделать. В принципе, я хочу, чтобы некоторые персонажи имели эквивалентность.Письма с одинаковой эквивалентностью

Например: M = N

Итак: мама = Нун

Однако: мама может также равна Num.

Мне посоветовали попробовать карту замен, и это сработало до третьего примера, когда не все M должны быть изменены на N.

Благодаря

Это код карты замены:

HashMap<String,String> replacements = new HashMap<>(); 
       replacements.put("n","m"); 
       replacements.put("m","n"); 

       String ignoreFirstChar = names[j].charAt(0) + (names[j].substring(1,names[j].length()).replaceAll("[^a-zA-Z]+", "").toLowerCase()); 

       String result = ""; 
       for(int i1 = 0; i1 < ignoreFirstChar.length(); i1++) { 
        String rpl = replacements.get(ignoreFirstChar.charAt(i1)+""); 
        result += rpl==null?ignoreFirstChar.charAt(i1):rpl; 
       } 


       System.out.println(ignoreFirstChar); 
       System.out.println(result); 
+1

Можете ли вы показать код, который вы пробовали? Трудно сказать, что вы на самом деле спрашиваете здесь. –

+0

Возможно, другой подход состоял бы в использовании классов эквивалентности: замените все экземпляры значений внутри одного класса на отдельный символ (возможно, '#'), а затем сравните полученные строки. Проверьте это для каждого класса эквивалентности отдельно. – Sirko

+1

Я бы просто назначил им числовые значения, и они добавили их. Может быть, как A = 1, B = 2, C = 4, D = 8 и т. Д., Но тогда я не уверен, что вы подразумеваете под «не все M должны быть изменены на N». Если вы проверяете эквивалентность строк, то имеет ли значение, является ли M N или нет, если M = N? – MxyL

ответ

0

Я предполагаю, что М и М не эквивалентны. Поэтому, если M = N, мы не можем сказать M = n. Если вы хотите использовать «карту замен», как вам было предложено, я бы использовал ее для нормализации ваших строк.

Вы бы текущую проблему

Given strings x and y, determine whether x equals y 

и изменить его на

Given strings x and y, determine whether normalize(x) equals normalize(y) 

Цель нормализации ваших строк применять какие-либо правила эквивалентности, которые у вас есть, например, M = N Таким образом, «Мама» будет преобразована в «Num», а затем вы можете сравнить две строки, не беспокоясь о правилах, потому что они уже применяются.

Метод normalize будет выглядеть как

/* 
* Takes each character in inStr and replaces them as necessary based on 
* your replacement map. For example, if you see an "n", then replace it with "m" 
*/ 
String normalize(String inStr) { 
    String newStr; 

    // something happens 

    return newStr; 
} 

Если чувствительность к регистру не важна, то вы бы снова нормализовать ваши строки сначала преобразовать их нижним регистр или верхний регистр (не имеет значения , если это согласовано)

+0

Спасибо, я попробовал ваше первое предложение дать каждой букве числовое значение. Я думал, что это будет лучше для случаев, когда многочисленные буквы имеют одинаковую эквивалентность. Не уверен, допустил бы этот пример. Вы оказали большую помощь. Спасибо. –

+0

@NatalieCarr Будьте осторожны с назначением значений. Например, я видел, что некоторые реализации присваивают «A = 1, B = 2, C = 3, ...», а затем он говорил мне, что 'c' эквивалентен' ab'. – MxyL

+0

Да, начинаю видеть маленькие ошибки. Есть ли у вас другие предложения? Например. а также M и N равны. Все гласные также эквивалентны, и я не уверен, что нормализация выше будет работать для этого. –

Смежные вопросы