第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查字符串中是否存在字符集 - 改進(jìn)

檢查字符串中是否存在字符集 - 改進(jìn)

慕碼人2483693 2023-02-16 15:41:37
如果兩個英語單詞只包含相同的字母,則它們是相似的。例如,food 和 good 不相似,但 dog 和 good 相似。(如果 A 與 B 相似,則 A 中的所有字母都包含在 B 中,B 中的所有字母都包含在 A 中。)給定一個單詞 W 和一個單詞列表 L,找到 L 中與 W 相似的所有單詞。將單詞計數(shù)打印到標(biāo)準(zhǔn)輸出。例子:輸入(標(biāo)準(zhǔn)輸入):love velo low vole lovee volvell lowly lower lover levo loved love lovee lowe lowes lovey lowan lowa evolve loves volvelle lowed love輸出(標(biāo)準(zhǔn)輸出):14解釋:L中與love相近的詞是 velo vole lovee volvell lover  levo loved love lovee lovey evolve loves volvelle love最多14.所以我目前的解決方案如下: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 result = 0;    Pattern p = Pattern.compile(buildPattern(s));    for (String val : arr) {        if (p.matcher(val).find()) result++;    }    System.out.println(result);}private static String buildPattern(String s) {    String pattern = "^";    for (int i = 0; i < s.length(); i++) {        pattern += "(?=.*" + s.charAt(i) + ")";    }    return pattern;}我想知道我的簡單代碼是否有任何改進(jìn)。Aho-Corasick 是否適用解決方案?
查看完整描述

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);

}


查看完整回答
反對 回復(fù) 2023-02-16
?
楊魅力

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;

}



查看完整回答
反對 回復(fù) 2023-02-16
?
HUH函數(shù)

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);


查看完整回答
反對 回復(fù) 2023-02-16
?
慕桂英546537

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


查看完整回答
反對 回復(fù) 2023-02-16
?
揚(yáng)帆大魚

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());

}


查看完整回答
反對 回復(fù) 2023-02-16
  • 5 回答
  • 0 關(guān)注
  • 155 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號