![](https://uploadfiles.nowcoder.com/images/20240918/471189571_1726657613729/D2B5CA33BD970F64A6301FA75AE2EB22)
![](https://uploadfiles.nowcoder.com/images/20240918/471189571_1726657625540/D2B5CA33BD970F64A6301FA75AE2EB22)
简单的字符串匹配:
public class OJTest4 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String single = in.nextLine();
System.out.println(findResult(single));
System.out.println(findResult2(single));
}
private static String findResult(String single) {
// 正则表达式模式,匹配完全连续交替的方波信号
Pattern pattern = Pattern.compile("^(01)+0$");
int maxLength = 0;
String longestWare = "-1";
StringBuilder currentWare = new StringBuilder();
for (char c : single.toCharArray()) {
if (c == '0') {
if (currentWare.length()>0 && currentWare.charAt(currentWare.length() - 1) == '0') {
if (pattern.matcher(currentWare).matches() && currentWare.length() > maxLength) {
maxLength = currentWare.length();
longestWare = currentWare.toString();
}
// currentWare = new StringBuilder();
// currentWare.setLength(0); 这三行都是把StringBuilder置为空
currentWare.delete(0,currentWare.length());
}
}
currentWare.append(c);
}
//检查最后一个波形
if (pattern.matcher(currentWare).matches() && currentWare.length() > maxLength) {
longestWare = currentWare.toString();
}
return longestWare;
}
private static String findResult2(String single) {
char[] singles = single.toCharArray();
StringBuilder sb = new StringBuilder();
int maxLength = 0;
String result = "-1";
Pattern pattern = Pattern.compile("^(01)+0$"); //^:表示匹配字符串的开头。(01)+:表示匹配一个或多个连续的01子串。0$:表示匹配以0结尾的字符串。
for (int i = 0; i < singles.length; i++) {
if (singles[i] == '0') {
if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '0') { //说明出现标志位00,之前加入的sb的字符串可以构成一个信号串
if (pattern.matcher(sb).matches() && sb.length() > maxLength) {
result = sb.toString();
maxLength = sb.length();
}
sb.setLength(0);
}
}
sb.append(singles[i]);
}
//尾部的波形结尾是10,不存在下一个0来让他进入上述的匹配判断里,所以得在这里判断一次。
if (pattern.matcher(sb).matches() && sb.length() > maxLength) {
result = sb.toString();
maxLength = sb.length();
}
return result;
}
}