检查一个字符串是否是另一个字符串的子集

k4aesqcs  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(570)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

上个月关门了。
改进这个问题
我正在尝试实现一个函数,该函数检查一个字符串是否是另一个字符串的子集。
例如,“lig”是“light”的子集。
“gil”也是“light”的一个子集。
但“liig”不是“light”的子集。
我尝试了所有的方法,for循环,嵌套for循环,if,else。。。
我会感激你的帮助!非常感谢!:)

uidvcgyl

uidvcgyl1#

你可以使用 Hashmap 以及评论中描述的一些简单操作:

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        System.out.println(isSubset("light", "lig"));
        System.out.println(isSubset("light", "gil"));
        System.out.println(isSubset("light", "liig"));
    }
    private static boolean isSubset(String str, String sub) {
        // change strings to lower case
        str = str.toLowerCase();
        sub = sub.toLowerCase();
        // initialze hashmap to store character frequencies in substring
        Map<Character, Integer> map = new HashMap<>();
        // iterate over the substring and store number of occurrences per character
        for(char c : sub.toCharArray()) {
            Integer count = map.get(c);
            map.put(c, count!=null ? count+1 : 1);
        }
        // iterate over the original string and decrement the count of each character present in the map
        for(char c : str.toCharArray()) {
            Integer count = map.get(c);
            if(count!=null)
                map.put(c, count-1);
        }
        // check if all characters count has reached to zero, i.e., present in the string
        for(int count : map.values())
            if(count != 0)
                return false;
        return true;
    }
}

输出:

true
true
false
vlurs2pr

vlurs2pr2#

改用substring()方法

相关问题