我有一个大小为10000的int数组,它只由1和0组成。当我将它转换为字符串时,它看起来像这样
String str="101010101010101010101001010101010101011110000000000001101010101101......"
我的任务是检查此数组是否有备用条目。
我试过这样:
Case 1: Case 2:
//when str=010101010..... //when str=101010101.....
boolean cha =true; boolean ch=true;
for(int j=0;j<n;j++) for(int j=0;j<n;j++)
{ {
if(j%2==0) if(j%2==1)
{ {
if(arr[j]==1) if(arr[j]==0)
cha=false; cha=true;
} }
if(j%2==1) if(j%2==0)
{ {
if(arr[j]==0) if(arr[j]==1)
cha=false; ch=false;
} }
if(cha==false) if(ch==false)
break; break;
} }
if(cha==true) if(ch==true)
System.out.println("YES"); System.out.println("YES");
有没有比循环遍历整个数组更好的方法,比较每个术语然后在没有找到替代时断开?
答案 0 :(得分:3)
您可以使用正则表达式:
String pattern = "^(10)+1{0,1}$|^(01)+0{0,1}$";
String s1 = "01010101";
String s2 = "101010101";
String s3 = "11001111";
s1.matches(pattern); // return true
s2.matches(pattern); // return true
s3.matches(pattern); // return false
答案 1 :(得分:1)
对于那些对“流畅”Java 8解决方案感兴趣的人:
C:\Program Files (x86)\Graphviz2.38\bin\dot.exe
答案 2 :(得分:0)
最简单的做法可能是验证前两个元素的所有元素:
// Replace this with a better test if you can have something other than 0 and 1
if(arr[0] + arr[1] != 1) {
cha = false;
} else {
for(int i = 2; i < arr.length; i++) {
if(arr[i] != arr[i % 2]) {
cha = false;
break;
}
}
}
如果偶数元素不等于cha
中的任何元素,则 false
将设置为arr[0]
,因为i % 2
对于偶数元素将始终为零。同样适用于奇数元素和arr[1]
。