返回字符串" hello / Hello / ... etc"的次数出现在给定字符串中的任何位置。
问题的不同之处在于
字符串hello在任何情况下都可以是大写或小写。
示例输入#1
count(" abc hello def")
示例输出#1
1
示例输入#2
伯爵("嗨。你好。你好。好的")
示例输出#2
2
示例输入#3
计数("喜&#34)
示例输出#3
0
MyApproach
public int count(String str)
{
String str1="Hello";
int l=str.length();
int l1=str1.length();
if(l<l1)
{
return 0;
}
else
{
int count=0;
int p=0;
int j=0;
while(j<l)
{
char c=str.charAt(j);
char c1=str1.charAt(p);
if(c==c1)
{
p++;
if(p==l1)
{
count++;
p=0;
}
}
else
{
p=0;
}
j++;
}
return count;
}
}
Output TestcaseParameters Testcase Actual Answer Expected
No output 'HELLO how are you' 0 1
我得到以下输出。
谁能告诉我我做错了什么?
答案 0 :(得分:6)
我想知道你的代码是如何编译的。 c1甚至没有声明。我可能会使用这样的逻辑:
str1.toUpperCase().split(str2.toUpperCase).length()-1
当str1
startsWith或endsWith str2
时,上面的代码不会返回正确的答案。这是一个更好的版本:
public static int count(String str1, String str2) {
int count = 0;
int len1 = str1.length();
int len2 = str2.length();
for (int i=0;i<=len1-len2;++i){
if ((str1.substring(i,i+len2)).equalsIgnoreCase(str2)) {
++count;
}
}
return count;
}
代码一步一步向右移动str2
,并比较str2
是否与str1
的子字符串相同。请注意,在str1
=“AAA”和str2
=“AA”的情况下,结果为2,因为AA
的第一次和第二次出现都会匹配。
第1步:
str1: *****
str2: **
第2步:
str1: *****
str2: **
第3步:
str1: *****
str2: **
第4步:
str1: *****
str2: **
如果您希望在上述情况下,AA
只计算一次,以下是您的代码:
public static int count(String str1, String str2) {
int count = 0;
int len1 = str1.length();
int len2 = str2.length();
for (int i=0;i<=len1-len2;){
if ((str1.substring(i,i+len2)).equalsIgnoreCase(str2)) {
++count;
i+=len2;
}else{
++i;
}
}
return count;
}
以上版本以这种方式运作:
第1步:
str1: *****
str2: **
第2步:
str1: *****
str2: **
它不会比较前面步骤中已比较的任何字符。
我根据您的示例输入数据测试了代码,它们都返回了预期的结果。
答案 1 :(得分:0)
如果这是学校作业,那么请说明。 否则你需要在谷歌上提问: &#39;计算字符串java中的出现次数&#39;或者其他的东西。 这将给你 - tada - stackoverflow:
Occurrences of substring in a string
希望能有所帮助。
答案 2 :(得分:0)
这是一个非常直观的解决方案:
public static void main(String[] args) {
System.out.println(count("hellohellohellohihihihihihihellohihhihello")); // Prints : 5
}
public static int count(String str){
String str1 = "hello";
String str2 = str.toLowerCase();
int index = 0;
int count = 0;
while (true){
if (str2.contains(str1)){
count++;
str2 = str2.substring(str2.indexOf(str1) + str1.length(), str2.length());
} else {
return count;
}
}
}
答案 3 :(得分:-1)
//在这里我们用小写改变了每个大写字符,以便将它与s2进行比较 public int count(String str){ String s1 =&#34;&#34 ;; String s2 =&#34; hello&#34 ;; int l2 = s2.length(); int count = 0;
int l1=str.length();
for(int i=0;i<=l1-l2;i++){
for(int j=i;j<l2+i;j++){
char ch=str.charAt(j);
if(ch>=65&&ch<=90){
ch=(char)(ch+32);
s1=s1+ch;
}
else
s1=s1+ch;
}
if(s1.equals(s2)){
count++;
}
//in that line i have removed the data of string s1 to form new string again
s1="";
}return count;
}