给定两个字符串str1和str2作为输入,确定str2是否与str1一起出现。
occurs("JavaLadders","Java")
true
occurs("Problem Panel","Panes")
false
MyApproach
在我的函数中,我接受2个Strings.In for循环我检查每个字符位置是否string1中的字符匹配string2.If它不匹配我使p = 0和count = 0.如果它匹配我增加我的count以及pI还检查count是否等于我的第二个字符串的长度。如果是,我移出循环返回true,否则我返回了fall。
public boolean occurs(String str1, String str2)
{
int l1=str1.length();
int l2=str2.length();
int p=0;
int count=0;
int j=0;
for(;j<l1;j++)
{
char ch1=str1.charAt(j);
char ch2=str2.charAt(p);
if(ch1==ch2)
{
p++;
count++;
}
else if(count==l2)
{
break;
}
else
{
p=0;
count=0;
}
}
if(l2==count)
return true;
else
return false;
}
Parameters Actual Output Expected Output
'Trisect Institute' 'Trisect' null true
任何人都可以提前指导我做错了。
答案 0 :(得分:1)
您的else if(count==l2)
声明位置错误。在您的代码中,此条件不会在ch1 == ch2
时检查。以下内容可以为您提供帮助:
public boolean occurs(String str1, String str2) {
int l1=str1.length();
int l2=str2.length();
int p=0;
int count=0;
int j=0;
for(;j<l1;j++) {
char ch1=str1.charAt(j);
char ch2=str2.charAt(p);
if(ch1==ch2) {
p++;
count++;
} else {
p=0;
count=0;
}
if(count==l2) {
break;
}
}
if(l2==count)
return true;
else
return false;
}
答案 1 :(得分:0)
if(str1.contains(str2)){
//str1 contains str2, do something here
} else {
//str1 doesn't contain str2, do something different here
}
答案 2 :(得分:0)
您遇到的问题是因为您在 while 语句中包含 return 语句。所以回报并不总是可以到达。
你必须从
中取出这些内容if (count == str2.length()) {
return true;
} else {
return false;
}
答案 3 :(得分:0)
您的代码存在很多问题。但是,我建议使用Java提供的一个内置字符串函数,如String.indexOf()或String.contains()。
我至少会尝试修复其中一些并在循环的每次迭代中打印出结果(或使用调试器)来帮助你。
答案 4 :(得分:0)
如果您不担心从头开始构建功能,请使用String.contains()方法,否则使用KMP或boyre moore文本搜索算法,您也可以尝试使用暴力方法,但效率不高
答案 5 :(得分:-2)
public boolean occurs(String str1, String str2) {
//write your code here
int len1=str1.length();
int len2=str2.length();
for(int i=0;i<(len1-len2+1);i++)
{
String str="";
for(int j=i;j<i+len2;j++)
{
str=str+str1.charAt(j);
if(str.equals(str2)) return true;
}
}
return false;
}