5 回答
TA贡献1843条经验 获得超7个赞
您可以使用带有 String substring() 方法的 for 循环:
Scanner input = new Scanner(System.in);
String str = input.nextLine();
int count = 0;
for (int i = 0; i < str.length()-3; i++)
if (str.substring(i, i+2).equals(str.substring(i+2, i+4))) count++;
System.out.print(count);
TA贡献1785条经验 获得超8个赞
使用 for 循环的非常简单的暴力破解方法:
String input = "abcXXXXXabc";
// Counter to store the number of quadruples found
int quadrupleCounter = 0;
// Loop over each character in the input string (skip the last 3 to prevent going out of bounds)
for(int i = 0;i < input.length() - 3; i++) {
// Get the current char in the string + the next 3
char c1 = input.charAt(i);
char c2 = input.charAt(i + 1);
char c3 = input.charAt(i + 2);
char c4 = input.charAt(i + 3);
// Check if all 4 characters are equal
if(c1 == c2 && c2 == c3 && c3 == c4) {
quadrupleCounter++; // Increase the counter
}
}
System.out.println(quadrupleCounter);
TA贡献1866条经验 获得超5个赞
或者使用正则表达式(只是为了好玩):
Pattern pattern = Pattern.compile("(.)\\1{3}");
int quadrupleCounter = 0;
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
do {
quadrupleCounter++
} while (matcher.find(matcher.start()+1));
}
TA贡献1816条经验 获得超6个赞
因此,如果我理解正确的话,“aaaabcccccc”意味着这个字符串中有 4 个四元组,例如,正如您所说的,它们可以重叠。所以这意味着 aaaa 是 1,前四个 cccc 是 2,然后从第二个 c 算起还有一个,所以是 3,然后从第三个 c 算起另一个是 4。如果是这样,那么下面的代码应该没问题
因此,我们通过将字符串拆分为字符来创建一个 String 'stringArray'。然后我们使用第一个 for 循环(带有 i)来遍历所有字母,然后在该 for 循环中我们创建另一个 for 循环来检查当前字母是否等于接下来的 3 个字母--->如果是这样,然后我们增加 quadCount(我们找到了多少个四元组)。然后当 forloop 完成时,我们打印出 quadCount。
您会看到我们检查 j=i+3 是否小于字符串数组的长度(在第二个 forloop 中),因为如果在我们检查的字符之后直到 letterArray 的末尾没有 3 个字符,那么肯定不会再有 3 个类似的。
如果注意空格意味着“cc cc”中没有任何四元组,那么下面的代码是正确的。如果这意味着您不应该考虑空格,并且“cc cc”有一个四元组,那么只需首先调用 String 上的 .trim() 方法,如下所示:String quad= "aaaabccc ccc".trim();-->this将从字符串中删除(修剪)所有空格,然后代码就可以了。
public static void main(String[] args) {
String quad= "aaaabcccccc";
int quadCount=0;
String[] stringArray= quad.split("");
for(int i=0; i<stringArray.length;i++){
String current= stringArray[i];
int j=i+3;
if(j<stringArray.length){
if(current.equals(stringArray[i+1]) && current.equals(stringArray[i+2]) && current.equals(stringArray[i+3]) ){
quadCount++;
}
}
}
System.out.println("Quadcounter final is: "+quadCount);
}
TA贡献1877条经验 获得超1个赞
未经测试,但我认为您可以从现在开始对其进行测试和更正。
public class CheckQuadruple {
private Boolean checkQuadrupleInString(String str, int i) {
if (i + 3 >= str.length())
return false;
if (str.charAt(i) != str.charAt(i + 1))
return false;
if (str.charAt(i + 1) != str.charAt(i + 2))
return false;
if (str.charAt(i + 2) != str.charAt(i + 3))
return false;
return true;
}
public int findQuadruple(String str) {
int sum = 0;
for (int i = 0; i < str.length(); i++) {
if (checkQuadrupleInString(str, i))
sum += 1;
}
return sum;
}
}
添加回答
举报