给定一个字符串,如果字符串“bat”和“ball”出现的次数相同,则返回true。
MyApproach
我按照上面的方法。我已经取了字符串“bat”和“ball”。我在字符串中搜索是否存在“bat”模式。我检查了原始字符串的每个字符并与字符进行了比较同样,我搜索了模式球。它将返回true 当球棒和球都出现相同的次数时。
以下是我的输出代码。
public boolean equal(String str)
{
String str1="bat";
String str2="ball";
int l=str.length();
int l1=str1.length();
int l2=str2.length();
if((l<l1) || (l<l2))
{
return false;
}
else
{
int m=0;
int n=0;
int countbat=0;
int countball=0;
int p=0;
int j=0;
str=str.toLowerCase();
str1=str1.toLowerCase();
str2=str2.toLowerCase();
while(j<l)
{
char c=str.charAt(j);
char c1=str1.charAt(p);
if(c==c1){
p++;
if(p==l1){
countbat++;
p=0;
}
}
else{
p=0;
}
j++;
}
while(m<l)
{
char c=str.charAt(m);
char c2=str1.charAt(n);
if(c==c2){
n++;
if(n==l2){
countball++;
n=0;
}
}
else
{
n=0;
}
m++;
}
if(countbat==countball)
return true;
else
return false;
}
}
Parameters Actual Output Expected Output
'bat+ball=cricket' null true
我无法得到正确的输出。任何人都可以告诉我 为什么呢?
答案 0 :(得分:1)
在您简要解释之前,您的方法并不明确。试试这个。如果你有一个大字符串来搜索球和蝙蝠,你的循环将会非常少。
String name = "ball bat ball bat bat ball bat bat";
int batCount = 0;
int ballCount = 0;
int index = 0;
int startIndex = 0;
while(index != -1){
index = name.indexOf("bat", startIndex);
startIndex = index + 1;
if(index != -1){
batCount++;
}
}
index = 0;
startIndex = 0;
while(index != -1){
index = name.indexOf("ball", startIndex);
startIndex = index + 1;
if(index != -1){
ballCount++;
}
}
System.out.println(batCount); //Outputs 5
System.out.println(ballCount); //Outputs 3
答案 1 :(得分:1)
更改字符串&#34; c2 = str1.charAt(n);&#34; to&#34; char c2 = str2.charAt(n);&#34; (第二次循环)
答案 2 :(得分:0)
提取一种方法来计算另一个String
的出现次数。像,
private static int countWord(String str, String word) {
int count = 0;
for (int i = 0; i < str.length() - word.length() + 1; i++) {
if (str.substring(i, i + word.length()).equals(word)) {
count++;
}
}
return count;
}
然后您可以实施equal
方法,例如
public static boolean equal(String str) {
return countWord(str, "ball") == countWord(str, "bat");
}