2016-10-20 24 views
2

要求單詞:排列降序它們的長度的順序

寫一個程序,接受字符串,並以降序>它們的長度,的順序打印的話不使用陣列

例如:

輸入=我愛我的國家印度

輸出=國印度愛我的我

我曾嘗試通過使用嵌套的循環來解決,但它會花時間更大的投入。建議更好的替代算法...

//Input=I love my country India 
//Output=country India love my I 
public static void main(String[] JVJplus) 
{ 
    String s,temp="",newS=""; 
    int i,j; 
    System.out.print("Entet s="); 
    s=in.nextLine()+" "; 
    for(i=s.length();i>0;i--) 
    { 
     for(j=0;j<s.length();j++) 
     { 
      char c=s.charAt(j); 
      if(c!=' ') 
       temp+=c; 
      else 
      { 
       if(temp.length()==i) 
        newS+=temp+" "; 
       temp=""; 
      } 
     } 
    } 
    System.out.println("Output="+newS); 
} 
+0

'而不使用arrays'意味着沒有陣列,的ArrayLists,比較器可以是溶液的一部分?如果所有這些都被禁止,那麼你的解決方案可能已經足夠了。 – pleft

+0

我同意elefasGR。記錄:您正在詢問如何改進工作代碼。這樣的請求可以/應該去codereview.stackexchange.com ...並記住:這個「難題」的全部重點是**不使用數組。從這個意義上說:無論如何,你無法解決這個問題**;所以你真的不需要擔心你的解決方案的性能太多。換句話說:不知何故,你必須「補償」不能使用數組。毫不奇怪,節省內存的解決方案需要「更多」cpu週期! – GhostCat

+0

扮演魔鬼的擁護者,在技術上不是一個字符串「陣列」嗎?你使用這個「數組」:char c = s.charAt(j); – JohnG

回答

1

如果你不允許使用數組,那麼正則表達式呢?

所以我們的想法是使用一個臨時int變量i的for循環,它用input字符串的長度進行初始化,每次迭代減1。

在我們與如果input字符串包含有長度的任何字(S)一個正則表達式檢查循環=我,這就是正則表達式\\b\\w{"+i+"}\\b比賽:究竟i連續字字符(=長度爲任何字= 1)

最後,如果有匹配,我們將它們打印到sysout。

我們從i = input.length()開始,因爲我們想要最長的單詞,並且可能整個輸入字符串都是單個單詞。

String input = "I love my country India"; 
    for (int i = input.length(); i > 0 ; i--) { 
     Matcher m = Pattern.compile("\\b\\w{"+i+"}\\b").matcher(input); 
     while(m.find()){ 
      System.out.print(m.group(0) +" "); 
     } 
    } 

打印country India love my I

+0

你給做了什麼兄弟,任何解釋... – JVJplus

+0

我更新了我的答案 –