給定代碼的時間限制必須小于 1.824 秒。下面給定的代碼超出了限制。我可以添加或替換什么以使代碼得到優化并在時間限制內運行。以下代碼通過從字符串中刪除“空格”和特殊字符來檢查給定的字符串是否為回文。刪除特殊字符后,字符串 mus 僅包含字母。 示例: 輸入: 2 I am :IronnorI Ma, i Ab?/Ba 輸出: 是 是代碼:public static void main (String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int T=Integer.parseInt(br.readLine()); while(T-->0) { String frog=br.readLine().replaceAll("\\s+","").replaceAll("[^\\w]",""); String news=""; char ch; for(int i=0;i<frog.length();i++) { ch=frog.charAt(i); news=ch+news; } if(news.equalsIgnoreCase(frog)) System.out.println("YES"); else System.out.println("NO"); }}}
2 回答

梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
這似乎是一項家庭作業,所以我不會為您提供代碼,我只會指導您如何改進您的方法。
您的方法是相當線性的,您反轉字符串,然后將反轉字符串與原始字符串進行比較。雖然這是一種正確的做法,但您需要進行太多操作。
假設字符串的長度為 N,另一種方法是簡單地循環 N/2 次,每次將第 i 個字符與第 N 個字符進行比較。如果有任何字符不匹配,則打印 No 并中斷,否則繼續比較。如果所有字符都匹配,則打印 yes。
Mead 的解決方案實際上與您的相同,盡管它減少了初始過濾操作。
添加回答
舉報
0/150
提交
取消