Java-检查一个字符串是否是另一个字符串的子集
我正在尝试实现一个函数,该函数检查一个字符串是否是另一个字符串的子集 例如,“lig”是“灯光”的子集 “gil”也是“light”的一个子集 但“liig”不是“light”的子集 我已经尝试了一切,for循环,嵌套for循环,if,elseJava-检查一个字符串是否是另一个字符串的子集,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
我会感谢你对我的帮助!非常感谢!:) 您可以使用
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