Java 如何使用此方法检查给定字符串中的字符是否可以拼写另一个字符串中的单词? publicstaticstringremovechar(stringtiles,charch){ 字符串removedWord=“”; int单=0; 对于(int i=0;itrue 可以拼写(“WQXOACW”、“PIG”)-->false 可以拼写(“,“PIG”)-->false 可以拼写(“WESCQSI”,“WESCQSI”)-->true 可以拼写(“,”)-->true
例如,我必须创建一个方法来检查字符串中的字符是否可以拼写另一个字符串中的单词Java 如何使用此方法检查给定字符串中的字符是否可以拼写另一个字符串中的单词? publicstaticstringremovechar(stringtiles,charch){ 字符串removedWord=“”; int单=0; 对于(int i=0;itrue 可以拼写(“WQXOACW”、“PIG”)-->false 可以拼写(“,“PIG”)-->false 可以拼写(“WESCQSI”,“WESCQSI”)-->true 可以拼写(“,”)-->true,java,Java,例如,我必须创建一个方法来检查字符串中的字符是否可以拼写另一个字符串中的单词 可以拼写(“WQXOACW”、“COW”)-->true 可以拼写(“WQXOACW”、“PIG”)-->false 可以拼写(“,“PIG”)-->false 可以拼写(“WESCQSI”,“WESCQSI”)-->true 可以拼写(“,”)-->true 我必须使用上面的removeChar方法。我不能使用子字符串。请帮助,我已经为此工作了好几天,但还没有弄清楚第一个参数-字符集 第二个参数-字 您希望循环第
- 可以拼写(“WQXOACW”、“COW”)-->true
- 可以拼写(“WQXOACW”、“PIG”)-->false
- 可以拼写(“,“PIG”)-->false
- 可以拼写(“WESCQSI”,“WESCQSI”)-->true
- 可以拼写(“,”)-->true
我必须使用上面的removeChar方法。我不能使用子字符串。请帮助,我已经为此工作了好几天,但还没有弄清楚第一个参数-字符集 第二个参数-字 您希望循环第二个参数中的所有字符,然后检查循环通过的当前字符的频率是否大于第一个参数中当前字符的频率。如果是,那么我们知道我们没有足够的字符来构造这个词 例如,假设我们的字符集是
WQXOACW
,要构造的单词是COW
。我们检查COW
中的每个字符,并检查每个字符出现的次数<代码>C出现一次。然后我们检查字符集中C
的频率。在本例中,它也是1。如果它更小,(例如,0),那么我们就知道我们没有足够的字符来创建单词,因为我们没有足够的字符,所以我们返回false
public static String removeChar(String tiles, char ch) {
String removedWord = "";
int single = 0;
for(int i = 0; i < tiles.length();i++) {
if(tiles.charAt(i) != ch || single == 1) {
removedWord = removedWord + tiles.charAt(i);
}else if(single == 0) {
removedWord = removedWord + "";
single++;
}
}return removedWord;
}
为了进一步优化效率(在上面的代码中,我们碰巧检查了同一字符出现多次的频率),我们可以使用以下方法删除字符串中的所有重复字母:
canSpell("WQXOACW","COW") //true
canSpell("WQXOACW","CO") //true
canSpell("WQXOACW","COWWW") //false
public String removeDuplicates(字符串输入){
字符串结果=”;
对于(int i=0;i
第一个参数-字符集
第二个参数-字
您希望循环第二个参数中的所有字符,然后检查循环通过的当前字符的频率是否大于第一个参数中当前字符的频率。如果是,那么我们知道我们没有足够的字符来构造这个词
例如,假设我们的字符集是WQXOACW
,要构造的单词是COW
。我们检查COW
中的每个字符,并检查每个字符出现的次数<代码>C出现一次。然后我们检查字符集中C
的频率。在本例中,它也是1。如果它更小,(例如,0),那么我们就知道我们没有足够的字符来创建单词,因为我们没有足够的字符,所以我们返回false
public static String removeChar(String tiles, char ch) {
String removedWord = "";
int single = 0;
for(int i = 0; i < tiles.length();i++) {
if(tiles.charAt(i) != ch || single == 1) {
removedWord = removedWord + tiles.charAt(i);
}else if(single == 0) {
removedWord = removedWord + "";
single++;
}
}return removedWord;
}
为了进一步优化效率(在上面的代码中,我们碰巧检查了同一字符出现多次的频率),我们可以使用以下方法删除字符串中的所有重复字母:
canSpell("WQXOACW","COW") //true
canSpell("WQXOACW","CO") //true
canSpell("WQXOACW","COWWW") //false
public String removeDuplicates(字符串输入){
字符串结果=”;
对于(int i=0;i
如@Spectric所述,要解决此任务,应比较字符串和单词中字符的频率
使用Java Stream API计算字符频率,然后检查单词中的字符,以检测缺少单词字符或单词字符计数大于计算频率的情况,这很方便:
public静态布尔拼写(字符串加扰,字符串字){
映射频率加扰=加扰
.toLowerCase()
.chars()
.mapToObj(c->(char)c)
.collect(collector.groupby(c->c,collector.summingit(c->1));
for(char-wordChar:word.toLowerCase().toCharArray()){
//wordChar不见了
如果(!freqScrambled.containsKey(wordChar)){
返回false;
}
//在scrambled中的字字符比word中的字字符少
if(freqScrambled.computeIfPresent(wordChar,(k,v)->v-1)<0){
返回false;
}
}
返回true;
}
测验
System.out.println(可以拼写(“abcdefgh”,“bad”);//真的
System.out.println(可以拼写(“abcdefgh”,“back”);//假的
System.out.println(可以拼写(“abcdefghijk”,“dead”);//假的
如@Spectric所述,要解决此任务,应比较字符串和单词中字符的频率
使用Java Stream API计算字符频率,然后检查单词中的字符,以检测缺少单词字符或单词字符计数大于计算频率的情况,这很方便:
public静态布尔拼写(字符串加扰,字符串字){
映射频率加扰=加扰
.toLowerCase()
.chars()
.mapToObj(c->(char)c)
.collect(collector.groupby(c->c,collector.summingit(c->1));
for(char-wordChar:word.toLowerCase().toCharArray()){
//wordChar不见了
如果(!freqScrambled.containsKey(wordChar)){
返回false;
}
//在scrambled中的字字符比word中的字字符少
如果(频率)
List<String> testData = List.of("WQXOACW", "PIG", "",
"PIG", "", "", "foobar", "", "counrts", "country", "wocxayw",
"wow", "feoce", "coffee", "tactic", "cat");
for (int i = 0; i < testData.size(); i+= 2) {
String letters = testData.get(i);
String word = testData.get(i+1);
System.out.printf("%10s -> %10s = %b%n",letters,word,
canSpell(letters, word));
}
WQXOACW -> PIG = false
-> PIG = false
-> = true
foobar -> = true
counrts -> country = false
wocxayw -> wow = true
feoce -> coffee = false
tactic -> cat = true
public static boolean canSpell(String letters, String word) {
char[] lets = letters.toLowerCase().toCharArray();
char[] wordChars = word.toLowerCase().toCharArray();
if (wordChars.length == 0) {
return true;
}
outer:
for (char c : wordChars) {
for (int i = 0; i < lets.length; i++) {
if (c == lets[i]) {
lets[i] = 0;
continue outer;
}
}
return false;
}
return true;
}