应该返回在凝视中立即重复3次的字母

问题描述 投票:0回答:2

示例:1.如果我通过“ BAAABA”,则应返回1,因为我们看到“ A”立即重复3次。2.当我通过“ BAABAA”时,应该返回0,因为我们没有任何字母立即重复3次。3.当我通过“ BBBAAABBAA”时,应该返回2。

class Coddersclub{
public static void main (String[] args) throws java.lang.Exception
{
    String input="Your String";
    int result=0;  
    int matchingindex=0;
    char[] iteratingArray=input.toCharArray();

    for (int matchThisTo=0;matchThisTo < iteratingArray.length;matchThisTo++) 
    {
        for(int ThisMatch=matchThisTo;ThisMatch < iteratingArray.length;ThisMatch++)
        {
             if(matchingindex==3)
              {
                  matchingindex=0;
                  result=result+1;
              }

          if(iteratingArray[matchThisTo] == iteratingArray[ThisMatch])
          {
              matchingindex=matchingindex+1;
              break;
          }
          else
          {
              matchingindex=0;
          }

        }
    }
    System.out.println(result);
}}
java c# resolution puzzle resolver
2个回答
0
投票
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SOTest {

    final static String regex = "(\\w)\\1*";

    public static void main(String[] args) {
        final String string = "aaabbccc";   
        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final  Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            String group = matcher.group(0);
            if(group.length()==3)
                System.out.println("Full match: " + group+" length :: "+group.length());
        }
    }
}

输出::

Full match: aaa length :: 3
Full match: ccc length :: 3

0
投票

您的初始代码大部分是正确的,您的逻辑也不错。您只需要在else语句上移动break语句:

if (iteratingArray[matchThisTo] == iteratingArray[ThisMatch]) {
    matchingindex = matchingindex + 1;
} else {
    matchingindex = 0;
    break;
}

根据Java代码,我也将ThisMatch重命名为小写:thisMatch

进展顺利。

© www.soinside.com 2019 - 2024. All rights reserved.