1
您的程序將花費 字符串S表示要測試的字符集。在字母數字輸入的所有字母將被小寫(1個≤LENGTH(S)≤500)基於所輸入的
輸出規格
,打印出可從輸入來創建獨特迴文的總數。 具體來說,假設我們有一個輸入字符串「bbaa」,那麼我們有迴文「baab」,「abba」,所以由輸入字符串「bbaa」創建的迴文總數是2.下面是我寫的代碼,它超出了時間限制,算法效率不高。有人可以通過某種方式構建算法,以便提高效率嗎?
這裏是我寫了這樣一個問題:
import java.util.*;
import java.lang.*;
public class Problem
{
private static int count=0;
public static void main(String[] args)
{
Scanner stdin = new Scanner(System.in);
//int count=0;
while(stdin.hasNextLine())
{ String line=stdin.nextLine();
char[] line_char=line.toCharArray();
Arrays.sort(line_char);
StringBuilder strbuild=new StringBuilder("");
solve(line_char,new boolean[line_char.length],strbuild);
//System.out.println(stdin.nextLine());
}
System.out.println(count);
stdin.close();
}
public static void solve(char[] chararray,boolean[] used,StringBuilder strbuild){
if(strbuild.length()==chararray.length){
//System.out.println(strbuild.toString());
if(checkpalindrome(strbuild)){
count++;
}
}else{
char rec=(char)(chararray[chararray.length-1]+1);
for(int i=0;i<chararray.length;i++){
if(!used[i]&&rec!=chararray[i]){
rec=chararray[i];
strbuild.append(chararray[i]);
used[i]=true;
solve(chararray,used,strbuild);
strbuild.deleteCharAt(strbuild.length()-1);
used[i]=false;
}
}
}
}
public static boolean checkpalindrome(StringBuilder strbuild){
String str=strbuild.toString();
StringBuilder str1=new StringBuilder(strbuild);
return str.equals(str1.reverse().toString());
}
}
假設我們只有一個輸入字符串!這就是爲什麼我把System.out.println(count);最後! – user144600
@GurwinderSingh - 不是重複的,因爲OP允許重新排列輸入字母。你鏈接的問題是找到所有的迴文串。 –
迴文不得不使用所有的輸入字母嗎?我猜測是這樣的,因爲除此之外,如果您的示例輸入中還有迴文「a」,「b」,「aa」和「bb」(更不用說空字符串,如果這被認爲是迴文)。但值得提問。 –