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

Java-检查一个字符串是否是另一个字符串的子集,java,string,substring,subset,Java,String,Substring,Subset,我正在尝试实现一个函数,该函数检查一个字符串是否是另一个字符串的子集 例如,“lig”是“灯光”的子集 “gil”也是“light”的一个子集 但“liig”不是“light”的子集 我已经尝试了一切,for循环,嵌套for循环,if,else 我会感谢你对我的帮助!非常感谢!:) 您可以使用Hashmap和注释中描述的一些简单操作来完成此操作: import java.util.HashMap; import java.util.Map; public class Main { pu

我正在尝试实现一个函数,该函数检查一个字符串是否是另一个字符串的子集

例如,“lig”是“灯光”的子集

“gil”也是“light”的一个子集

但“liig”不是“light”的子集

我已经尝试了一切,for循环,嵌套for循环,if,else


我会感谢你对我的帮助!非常感谢!:)

您可以使用
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;
    }
}

if(“light.”contains(“lig”){//…}
你能展示一下你所尝试的吗?你能解释一下你所说的子集是什么意思吗?如果字符串s1可以由字符串s2的字符创建,那么您的意思是字符串s1是s2的子集吗。字符串s2的字符顺序是否应与字符串s1相同?谢谢您的评论!我的意思是,第一个字符串的字母也必须在第二个字符串中,而顺序并不重要。我创建了一个计算字符在字符串中出现次数的函数,并尝试使用它,但没有成功。你熟悉地图吗?如果是,则创建一个映射,该映射将计算每个字符串(如
abbc
->a:1 b:2 c:1)中存在的字符重复数,然后对其他字符串(如
ba
a:1 b:1)执行相同操作。现在,若表示“超集”的映射并没有超过超集中的数量,那个么你们只需要检查来自“子集”的字母是否存在。谢谢!不幸的是,我不熟悉StringBuilder、toString或Reverse。我正在尝试使用简单的方法。@math4我更新了答案谢谢你的时间!我想我会在几周内理解你在这里做了什么,所以我会再次阅读。
true
true
false