所以最近我被邀请参加谷歌foo.bar挑战,我相信代码应该按照应有的方式运行。确切地说,我需要找到的是" abc"在一个字符串中。当我用它们验证我的代码时,我通过了3/10个测试用例。我开始心疼,因为我不知道自己做错了什么。我已经编写了代码,我将与你们分享。字符串也需要少于200个字符。当我从他们的网站上运行这个时,我通过了3次测试而失败了7.基本上7件事情都需要做对。
实际问题: 编写一个名为answer(s)的函数,给定非空字符串 长度超过200个字符描述M& Ms的序列。返回可以从蛋糕上切下的最大等份数,而不留任何剩余物。
示例:输入:(字符串)s =" abccbaabccba"
输出:(int)2
输入:(字符串)s =" abcabcabcabc"
输出:(int)4
public static int answer(String s) {
int counter = 0;
int index;
String findWord ="ABC";
if(s!=null && s.length()<200){
s = s.toUpperCase();
while (s.contains(findWord))
{
index = s.indexOf(findWord);
s = s.substring(index + findWord.length(), s.length());
counter++;
}
}
return counter;
}
答案 0 :(得分:2)
我在您的代码段中看到了一些内容:
1
if(s.length()<200){
为什么要检查长度是否小于200?这是一个要求吗?如果没有,您可以跳过检查长度。
2
String findWord ="abc";
...
s.contains(findWord)
测试程序可以检查大写字母吗?示例:“ABC”?如果是这样,您可能需要考虑更改s.contains()
行的逻辑。
更新
您还应该考虑对输入字符串进行null
检查。这将确保测试用例不会因null
输入而失败。
答案 1 :(得分:1)
你的代码逻辑很好但另一方面我发现你没有检查输入字符串是空还是空。 我相信google foo.bar希望以正确的方式看待逻辑和编码方式。
所以不要感觉不好
答案 2 :(得分:0)
我会采用更简单的方法
int beforeLen = s.length ();
String after = s.replace (findWord, "");
int afterLen = after.length ();
return (beforeLen - afterLen) / findWord.length ();
答案 3 :(得分:0)
在阻止之前将索引的声明输出,isn从来没有好的重新声明相同的变量n。
int index;
while (s.contains(findWord))
{
index = s.indexOf(findWord);
....
}
我希望这个帮助
更新
尝试压缩代码
public static int answer(String s) {
int counter = 0;
int index;
String findWord = "ABC";
if (s != null && s.length() < 200) {
s = s.toUpperCase();
while ((index = s.indexOf(findWord)) > -1) {
s = s.substring(index + findWord.length(), s.length());
counter++;
}
}
return counter;
}
更新
逻辑对我来说似乎很好,如果你可以尝试这个,我还是会尝试提高性能
while ((index = s.indexOf(findWord, index)) > -1) {
//s = s.substring(index + findWord.length(), s.length());
index+=findWord.length();
counter++;
}
答案 4 :(得分:0)
String pattern = "abc";
String line="<input text here>";
int i=0;
Pattern TokenPattern=Pattern.compile(pattern);
if(line!=null){
Matcher m=TokenPattern.matcher(line);
while(m.find()){
i++;
}}
System.out.println("No of occurences : "+ " "+i);