5 回答

TA貢獻(xiàn)1825條經(jīng)驗 獲得超4個贊
由于只有 26 個字母,而 an 中有 32 位int,因此 anint足以容納有關(guān)單詞中出現(xiàn)的字母的所有信息:
static int getFingerprint(String s)
{
int result=0;
for (int i = s.length()-1; i>=0; --i) {
char c = s.charAt(i);
if (c>='a' && c<='z')
result |= 1<<(int)(c-'a');
else if (c>='A' && c<='Z')
result |= 1<<(int)(c-'A');
}
return result;
}
public static void main(String[] args) {
String[] arr = new String[]{"velo", "low", "vole", "lovee", "volvell", "lowly", "lower", "lover", "levo", "loved", "love",
"lovee", "lowe", "lowes", "lovey", "lowan", "lowa", "evolve", "loves", "volvelle", "lowed", "love"};
String s = "love";
int fingerprint = getFingerprint(s);
int matches = 0;
for (String item : arr) {
if (getFingerprint(item)==fingerprint)
++matches;
}
System.out.println(matches);
}

TA貢獻(xiàn)1811條經(jīng)驗 獲得超6個贊
我建議簡化正則表達(dá)式,不需要前瞻,簡單的“^[love]*$”就可以了。
private static String buildPattern(String s) {
String pattern = "^[";
for (int i = 0; i < s.length(); i++) {
pattern += s.charAt(i);
}
pattern += "]*$";
return pattern;
}

TA貢獻(xiàn)1836條經(jīng)驗 獲得超4個贊
數(shù) 10 應(yīng)該成功!
String[] arr = new String[] { "velo", "low", "vole", "lovee",
"volvell", "lowly", "lower", "lover", "levo", "loved", "love",
"lovee", "lowe", "lowes", "lovey", "lowan", "lowa", "evolve",
"loves", "volvelle", "lowed", "love" };
String s = "love";
Predicate<Character> p = x -> s.indexOf(x) > -1 ? true : false;
List<String> asList = Arrays.asList(arr);
asList.stream().forEach(x -> {
List<Character> chars = new ArrayList<>();
for (int i = 0; i < x.length(); i++) {
chars.add(x.charAt(i));
}
boolean anyMatch = chars.stream().allMatch(p);
if (anyMatch)
count++;
});
System.out.println(count);

TA貢獻(xiàn)1848條經(jīng)驗 獲得超10個贊
public static void main(String[] args) {
String[] arr = new String[]{"velo", "low", "vole", "lovee", "volvell", "lowly", "lower", "lover", "levo", "loved", "love",
"lovee", "lowe", "lowes", "lovey", "lowan", "lowa", "evolve", "loves", "volvelle", "lowed", "love"};
String s = "love";
Set<Character> searchWordCharacters = getDistinctCharacters(s);
long result = Stream.of(arr)
.map(Scratch::getDistinctCharacters)
.filter(wordCharacters -> wordCharacters.size() == searchWordCharacters.size())
.filter(wordCharacters -> wordCharacters.containsAll(searchWordCharacters))
.peek(System.out::println)
.count();
System.out.println(result);
}
private static Set<Character> getDistinctCharacters(String word) {
return word.chars()
.mapToObj(i -> (char) i)
.collect(Collectors.toSet());
}
結(jié)果:10

TA貢獻(xiàn)1799條經(jīng)驗 獲得超9個贊
我只計算了 10 個應(yīng)該成功的,無論是在我的實(shí)施中還是在我手動檢查時。
很簡單,就是比較每個單詞中的字母集合是否相等
public static void main(String... args)
{
String word = "love";
List<String> strs = Arrays.asList(
"velo", "low", "vole", "lovee", "volvell", "lowly", "lower", "lover", "levo", "loved", "love",
"lovee", "lowe", "lowes", "lovey", "lowan", "lowa", "evolve", "loves", "volvelle", "lowed", "love"
);
System.out.println(
strs.stream()
.filter(str -> chars(word).equals(chars(str)))
.count()
);
}
private static Set<Character> chars(String word)
{
return word.chars()
.mapToObj(ch -> (char) ch)
.collect(Collectors.toSet());
}
添加回答
舉報