Yo estoy tratando de hacer una función que imprime el número de caracteres comunes en cadenas dadas n. (Nota que los caracteres se pueden usar varias veces)
Estoy luchando para llevar a cabo esta operación en las cuerdas n Sin embargo, lo hice por 2 cadenas, sin ningún carácter repiten más de una vez.
He publicado mi código.
public class CommonChars {
public static void main(String[] args) {
String str1 = "abcd";
String str2 = "bcde";
StringBuffer sb = new StringBuffer();
// get unique chars from both the strings
str1 = uniqueChar(str1);
str2 = uniqueChar(str2);
int count = 0;
int str1Len = str1.length();
int str2Len = str2.length();
for (int i = 0; i < str1Len; i++) {
for (int j = 0; j < str2Len; j++) {
// found match stop the loop
if (str1.charAt(i) == str2.charAt(j)) {
count++;
sb.append(str1.charAt(i));
break;
}
}
}
System.out.println("Common Chars Count : " + count + "\nCommon Chars :" +
sb.toString());
}
public static String uniqueChar(String inputString) {
String outputstr="",temp="";
for(int i=0;i<inputstr.length();i++) {
if(temp.indexOf(inputstr.charAt(i))<0) {
temp+=inputstr.charAt(i);
}
}
System.out.println("completed");
return temp;
}
}
3
abcaa
bcbd
bgc
3
pueden ser sus posibilidades de que un mismo personaje puede estar presente varias veces en una cadena y no se supone que para eliminar esos caracteres en lugar comprobar el no. de veces que se repiten en otras cadenas. para, por ejemplo
3
abacd
aaxyz
aatre
salida debe ser 2
será mejor si me da solución en Java
Usted tiene que convertir todos los String
s a Set
de Character
s y retener todo desde la primera. A continuación la solución tiene muchos lugares que podrían ser optimizado, pero usted debe entender idea general.
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) {
List<String> input = Arrays.asList("jonas", "ton", "bonny");
System.out.println(findCommonCharsFor(input));
}
public static Collection<Character> findCommonCharsFor(List<String> strings) {
if (strings == null || strings.isEmpty()) {
return Collections.emptyList();
}
Set<Character> commonChars = convertStringToSetOfChars(strings.get(0));
strings.stream().skip(1).forEach(s -> commonChars.retainAll(convertStringToSetOfChars(s)));
return commonChars;
}
private static Set<Character> convertStringToSetOfChars(String string) {
if (string == null || string.isEmpty()) {
return Collections.emptySet();
}
Set<Character> set = new HashSet<>(string.length() + 10);
for (char c : string.toCharArray()) {
set.add(c);
}
return set;
}
}
imprime el código de seguridad:
[n, o]