我需要我的作业来编写获取两个参数的方法,字符串和字符,并且它需要返回以该字符串开头并以该字符结尾的字符串数。
示例:
对于字符串"abcbcabcacab"
和char'c',该方法将返回6。
(子字符串为"cbc", "cabc", "cac", "cbcabc", "cabcac", "cbcabcac"
)
它需要尽可能高效,我可以使用的唯一两种方法是charAt()
和length()
。这很难得到地狱,经过3个小时的尝试,我问你们,如果有人解决这个问题,或者至少给我一些线索。
答案 0 :(得分:2)
显而易见的解决方案是检查输入字符串中的每个符号,如果等于指定的char,则尝试查找所有可能的子字符串,从这一点开始,如下所示:
long cnt = 0;
for (int i = 0; i < (s.length() - 1); i++)
if (s.charAt(i) == c)
for (int j = (i + 1); j < s.length(); j++)
if (s.charAt(j) == c)
cnt++;
return cnt;
该解决方案具有复杂度O(N ^ 2)
但是,子串的数量实际上由字符串中char的出现次数决定,这似乎是Triangular number
因此,优化的O(N)解决方案是:
long cnt = -1;
for (int i = 0; i < s.length(); i++)
if (s.charAt(i) == c)
cnt++;
return (cnt * (cnt + 1)) >>> 1;
答案 1 :(得分:0)
最简单的是你应该使用一个循环。
遍历字符串。检查当前字符串是否以给定的char开头并以给定的char结束。如果它没有跳转到下一个。如果它只是从1到长度减去第二个最后一个字符的计数器循环。
你将通过踢出无效的字符串来减少时间,你将检查2个字符减去每个字符串;) 我想这是一个非常快的方式。
实施例
// String definition bla String[] myArray
int count = 0;
for(int i = 0; i < myArray.length(); i++) {
if(myArray[i].charAt(0) == givenChar && myArray[i].charAt(myArray.length()-1)) {
for(int j = 1; j < myArray.length()-2;j++) {
if(myArray[i].charAt(j) == givenChar)
count ++;
}
}
}
这是个粗略的想法。
我正在检查给定的String是否以givenChar开始和结束。 如果它迭代通过字符串再次检查givenChar。 如果确实存在,我计算1。
我希望这可以帮助你;)
度过美好的一天!