【发布时间】:2015-11-06 07:09:03
【问题描述】:
我做了一个小程序,它检查需要删除哪个索引以使其成为回文。由于一次执行中可能有很多测试用例,我不得不使用 for 循环的深层嵌套。我想知道是否有任何替代方法可以嵌套循环以提高性能。
以下是我的代码:
import java.util.*;
import java.io.*;
public class Testhis {
public static void main(String[] args) throws Exception {
Scanner sc=new Scanner(System.in);
//System.out.println("No. of testcases:");
int testcases=sc.nextInt();
String strin[]=new String[testcases];
for (int i=0;i<testcases;i++)
strin[i]=sc.next();
int res[]= checkPalindromeIndex(strin);
for(int i=0;i<res.length;i++)
System.out.println(res[i]);
}
private static int[] checkPalindromeIndex(String[] strin) {
int result[]=new int[strin.length];
a:
for(int i=0;i<strin.length;i++){
System.out.println("checking:::::"+strin[i]);
if(checkPalFlag(strin[i])){
result[i]=-1;
continue a;
}
else{
for(int j=0;j<strin[i].length();j++){
StringBuilder sb=new StringBuilder(strin[i]);
String teststr=sb.deleteCharAt(j).toString();
System.out.println("resulting string:"+teststr);
if(checkPalFlag(teststr)){
result[i]=j;
continue a;
}
}
}
}
return result;
}
private static boolean checkPalFlag(String string) {
boolean flag=false;int len=string.length();
for(int i=0;i<(len+1)/2;i++){
if(string.charAt(i)==string.charAt(len-(i+1))){
flag=true;
continue;
}
else{
flag=false;
break;
}
}
System.out.println("string "+string+" is a palindrome? :"+flag);
return flag;
}
}
【问题讨论】:
-
我投票结束这个问题,因为这个问题属于Code Review。
-
你的意思是这不是一个有效的问题吗?我不希望我的代码被审查..我想要问题的解决方案不是要审查的代码。代码只是一个例子
-
也许用书面文字/伪代码而不是实际代码来解释你的方法会更好
-
对于输入
abcb,我可以看到以下palindromes:a,b,c,bb,bcb。你想要哪一个?如果是第一个,答案是删除索引 1、2、3。如果是最后一个,答案是删除索引 0。你没有说你想要最长的回文,所以第一个是最简单的,但是如果你确实想要最长的,如果有多个候选最长回文,你想要哪一个? -
您是否在寻找最短回文、最长回文、任何或每种可能的组合?
标签: java performance loops for-loop nested