如何在字符串中查找四倍?

时间:2019-05-17 11:13:23

标签: java

我有这个测试挑战,但是我绝对是新手,因此我坚持使用它,任何适当的解决方案将不胜感激!

我们将说字符串中的“四元组”是一个连续出现四次的字符。打印给定字符串中的四倍数。四元组可能重叠。

提示:当心空格!

输入格式 一行包含一个字符串。

输出格式 一个数字。

样本输入 abcXXXXXabc

样本输出 2

import java.util.*;

public class Quadruples{
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        char [] c = s.toCharArray();
        int j=0; int k=1; int m=j+2;

        for(int i=0; i<c.length-1; i++){
            if(c[j] != c[k]){
                j++; k++;
            }else{
                for(int l=0; l<c.length-1; l++){
                    if(c[j] == c[m]){
                        m++;
                    }else{   
                        continue;
                    }
                }
            }
        }
    }
}

5 个答案:

答案 0 :(得分:2)

使用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);

答案 1 :(得分:2)

或使用正则表达式(只是为了好玩):

    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));
    }

答案 2 :(得分: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;
    }
}

答案 3 :(得分:1)

因此,如果我对它的理解不正确,那么“ aaaabcccccc”表示该字符串中有4个四倍体,例如您所说的它们可以重叠。因此,表示aaaa为1,前四个cccc为2,然后从第二个c开始计数,再有一个3使得3,然后从第三个c开始计数另一个cc4。 如果是这样,那么下面的代码应该没问题。

因此,我们通过将字符串拆分为字符来创建字符串'stringArray'。然后,我们使用冷杉的for循环(带有i)来遍历所有字母,然后在该for循环中进行另一个for循环,以检查当前字母是否等于接下来的3个字母--->如果为真,然后我们增加quadCount(我们发现了多少个四倍)。然后在完成forloop后,我们将输出quadCount。

您会看到我们检查j = i + 3是否小于String数组的长度(在第二个forloop中),这是因为直到在letterArray后面的第三个字符不多了3个字符为止检查,然后肯定不会再有3个类似的东西。

如果注意空格意味着“ cc cc”中没有任何四倍,则下面的代码是正确的。如果那意味着您不应该考虑空格,并且“ cc cc”只有一个四倍,则只需首先在String上调用.trim()方法即可。 像这样:String quad =“ aaaabccc ccc” .trim();->这将从String中删除(修剪)所有空格,然后代码就好了。

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);
    }

答案 4 :(得分:0)

您可以使用带有 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);