2010-07-13 29 views
2

給出一行字符串,每個單詞由空格分隔。您只能在字符串的第5-10列中插入新行。您的目標是最大限度地增加以字符x結尾的行數。你將如何做這個例子。最大化以某個字符結尾的行數

編輯:這句話可以用任何字符結尾,說你被賦予文本

abcdfg cdx abcdx abcdefg aa ggffx ax 

然後顯示在最不經意的將是

column: 
1234567890 
abcdfg cdx 
abcdx 
abcdefg 
aa ggfx 
ax 

這將最大限度的結果,因爲它具有4行,以x

結尾我覺得這個問題的真正問題是我們如果不以x結尾,它是如何破壞,它是一個一個可以打破的位置。

觀察

abcdefg 
aa ggfx 
ax 

如果機管局與ABCDEFG 1號線那麼我們只能有1個更多的x因爲ggfx不能突破就行。結果ggfx ax將在同一行

+4

地上有一池水。門從裏面鎖着。兩名警衛在外面等候。一個總是謊言。兩人都用一種未知的語言說話。蛋糕是一個謊言。 – 2010-07-13 03:53:03

+0

在這裏定義你的數據集。它是一個長字符串,有一堆可能會或可能不會以x結尾的單詞嗎?你在考慮一個專欄?字符列(空間也被當作字符計算)還是每個「字」列? – Caladain 2010-07-13 03:55:30

+0

你如何在你的例子中突破兩次? 'abcdx'結尾處的中斷在您定義的索引之外。 – 2010-07-13 04:19:20

回答

0

我會天真地嘗試像下面的僞代碼:

string foo = "abcdfg cdx abcdx ggx"; 
string newFoo = foo; /* Assumes immutable strings */ 

int startIndex = 5; 
int endIndex = 10; 
int inserts = 0; 

for (int i=startIndex-1; i<=endIndex-1 && i<foo.Length-1; i++) 
{ 
if (foo.Substring(i, 1) == "x") /* Substr is (startIn, length) */ 
{ 
    newFoo = newFoo.Insert(i+1+inserts, "\n"); 
    inserts++; 
} 
} 

會留下空格開始,如果下一個字符是在休息的空間。不知道這是否是需要的。

+0

這是......不對。你不能同時在i和i + 1上劃線。每次插入休息時,您都需要增加5。 – Borealid 2010-07-13 04:16:05

+0

我如何將它打破爲我和我+ 1?爲什麼我每次插入休息時都會增加五個? – 2010-07-13 04:17:39

+0

此外,如果我們已經在5-10範圍內,並且當前單詞不以x結尾,那麼即使它不以x結尾,我們也必須制動 – tomwu 2010-07-13 04:27:09

1

每當你斷線可以斷線並遇到相應的字符。如果在接下來的九年內沒有目標角色,那就一直打破。

不幸的是,這會給出最佳答案。這是一個簡單的遊戲。

如果我們可以對某些列的目標字符(比如8-10列)中的行進行評分,那將會更有趣。但只有最後一列的數字,貪婪贏得一天。

我假設你在這裏可以不用連字符或任何東西而將單詞切碎。但是你沒有給我們其他規則,那麼我還能做出什麼其他假設?

String str = "000x0dfkdfjfxxiwrhx fsjhfx fwuhxjhfe xj etc etc you get it"; 
int doneidx = 0; 
char targetchar = 'x'; 
StringBuffer tmp = new StringBuffer(); 
while (doneidx < str.length()) { 
    if (tmp.length() < 5) { 
     tmp.append(str.charAt(doneidx)); 
    } else { 
     for (int i = 0; i < 6; i++) { 
      if (doneidx+i < str.length() && str.charAt(doneidx+i) == targetchar) { 
       tmp.append(str.substring(doneidx, doneidx+i+1)); 
       doneidx += i+1; 
       break; 
      } 
     } 
     System.out.println(tmp.toString()); 
     tmp = new StringBuffer(); 
    } 
} 

這是一個O(N^2)算法。可以使用記憶將其縮減爲O(N)。但是,老實說,我認爲這不重要。

+0

你不允許說話。出於某種原因,我不認爲這很簡單。如果我們遇到一個可以破譯並以x結尾的單詞,那麼我們就會剎車,這會導致將來的單詞得分較低嗎?我更加思考動態而不是貪婪。 – tomwu 2010-07-13 04:17:51

+0

@tomwu:aargh,你爲什麼不說這個?現在我必須重寫我的工作代碼解決方案-_-。 – Borealid 2010-07-13 04:27:10

+0

這將教你回答不明確的問題。 ; O) – Svante 2010-07-13 10:45:02

相關問題