溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何搭建一個(gè)字符串包裹函數(shù)

發(fā)布時(shí)間:2021-10-12 10:54:05 來源:億速云 閱讀:108 作者:iii 欄目:編程語言

這篇文章主要介紹“如何搭建一個(gè)字符串包裹函數(shù)”,在日常操作中,相信很多人在如何搭建一個(gè)字符串包裹函數(shù)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”如何搭建一個(gè)字符串包裹函數(shù)”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

問題描述

我們希望構(gòu)建一個(gè)字符串處理函數(shù),這個(gè)字符串處理函數(shù)將會(huì)對(duì)給定輸入的字符串和參數(shù)進(jìn)行處理。

我們首先將會(huì)定義一個(gè)字符串的數(shù)組,在這個(gè)字符串的數(shù)組中每一個(gè)元素都是存儲(chǔ)為一個(gè)單詞,同時(shí)我們將會(huì)給出一個(gè)整數(shù)類型的參數(shù)。你的方法將會(huì)對(duì)上面輸入的 2 個(gè)參數(shù)進(jìn)行運(yùn)算,在每一個(gè)單詞和每一個(gè)單詞之間會(huì)添加一個(gè)字符 ”-“ 來進(jìn)行區(qū)分,同時(shí)新生成的數(shù)組或者 List 每一元素的字符串長度將不能超過給出的字符串的長度。

如果你新生成的元素是以橫杠結(jié)尾的話,那么你需要?jiǎng)h除這個(gè)橫杠。

樣例

下面給出了這個(gè)問題的示例,以便于你參考。

輸入?yún)?shù) 1輸入?yún)?shù) 2輸出
words1 = [ “The”, “day”, “began”, “as”, “still”, “as”, “the”, “night”, “abruptly”, “l(fā)ighted”, “with”, “brilliant”, “flame” ]13[ “The-day-began”, “as-still-as”, “the-night”, “abruptly”, “l(fā)ighted-with”, “brilliant”, “flame” ]
words1 = [ “The”, “day”, “began”, “as”, “still”, “as”, “the”, “night”, “abruptly”, “l(fā)ighted”, “with”, “brilliant”, “flame” ]20[ “The-day-began-as”, “still-as-the-night”, “abruptly-lighted”, “with-brilliant-flame” ]
words2 = [ “Hello” ]5[ “Hello” ]
words3 = [ “Hello”, “world” ]5[ “Hello”, “world” ]
words4 = [“Well”, “Hello”, “world” ]5[ “Well”, “Hello”, “world” ]
words5 = [“Hello”, “HelloWorld”, “Hello”, “Hello”]20[ “Hello-HelloWorld”, “Hello-Hello” ]

上面給出的是是測試用的示例,其中輸入?yún)?shù) words1 到 5 就是定義的變量名而已,不需要過度關(guān)注。

思路點(diǎn)評(píng)和源代碼

這個(gè)題目的難度還是比較大的,尤其是在沒有開發(fā)工具進(jìn)行編譯的時(shí)情況下。

這個(gè)題目是 indeed.com 的一個(gè)在線面試測試題。這個(gè)公司的在線面試測試使用的是第三方公司提供的評(píng)估工具,主持面試的人可能是對(duì)技術(shù)并不是非常了解的人,或者是對(duì)技術(shù)比較了解的人,我們不清楚具體的情況。

但是在面試過程中,他們只注重程序的輸出和面試的結(jié)果,至于你的思路或者你的想法,主持面試的人可能并不十分關(guān)注,同時(shí)也不怎么會(huì)聽你的解釋,很多時(shí)候你都會(huì)是在自言自語。

整體感覺面試互動(dòng)很少,更多的時(shí)候是你在對(duì)著屏幕說話。

最開始的時(shí)候,我的思路是首先對(duì)給出的數(shù)組進(jìn)行遍歷,當(dāng)取得第一個(gè)元素的時(shí)候,將元素后面添加橫杠,然后與長度進(jìn)行對(duì)比,如果長度超過了給定的長度的話那么就刪除橫杠后壓入需要返回的列表中。

如果長度少于返回的長度,那么再取出下一個(gè)元素,同時(shí)再結(jié)尾再添加橫桿后進(jìn)行判斷,然后再確定橫杠的處理。

這個(gè)題目的主要問題就在于橫杠的處理,有時(shí)候橫杠在結(jié)尾,有時(shí)候橫杠在開頭,你需要一個(gè)一個(gè)判讀。

在隨后的測試中,我發(fā)現(xiàn)一直是橫杠處理不好,結(jié)果導(dǎo)致沒有完全通過最后的測試,就是上面測試用例的第二行。

思路 2

因?yàn)檫@個(gè)題目時(shí)間有限,并且我們還不能使用 StringUtils 來進(jìn)行一些快速的字符串處理,因此我沒有在規(guī)定的時(shí)間內(nèi)完成所有的測試。在隨后結(jié)束面試后,我再仔細(xì)思考了下問題后發(fā)現(xiàn)其實(shí)我們還可以有其他的辦法來進(jìn)行操作。

我使用下面的思路,并且完成了代碼的修改。

首先我們需要將輸入的數(shù)組變成一個(gè)長的字符串,單詞之間使用橫杠分隔。例如,[ “Hello”, “world” ] 將會(huì)變成字符串為:Hello-world。

在完成上面的操作后,我們需要使用一個(gè) while 循環(huán)來做。

首先在 while 循環(huán)中判讀整個(gè)字符串長度小于給定的長度,這個(gè)時(shí)候需要直接返回,然后中斷循環(huán)。

下一步,對(duì)字符串,從頭到給定的長度進(jìn)行截?cái)嗪螳@得子字符串,隨后對(duì)子字符串進(jìn)行判斷,如果這個(gè)子字符串是以橫杠結(jié)尾的話,刪除橫杠然后壓入需要返回的數(shù)組,然后更新需要處理的字符串為截?cái)嗪笥嘞碌淖址?/p>

如果按照給定的長度進(jìn)行截?cái)嗪螅惬@得最后的一個(gè)字符不是橫杠,那么我們就知道你截?cái)嗟搅藛卧~上,獲得的子字符串中,找到最后一個(gè)橫杠,然后獲得索引的 ID,在獲得這個(gè)索引的 ID 后對(duì)需要處理的字符串按照索引 ID 進(jìn)行截?cái)唷?/p>

然后刪除掉最后的橫杠壓入需要返回的列表中。

在余下的字符串中可能遇到的情況是目前你將會(huì)是橫杠開頭的,因此你還需要?jiǎng)h除掉余下字符串中開頭和結(jié)尾的橫杠。

繼續(xù)上面的處理,直到需要處理的字符串長度小于給定的長度后中斷循環(huán)。

如何搭建一個(gè)字符串包裹函數(shù)

上圖是對(duì)上面思路 2 中的算法進(jìn)行測試后的返回結(jié)果,從結(jié)果中可以看到滿足需要輸出的預(yù)期。

到此,關(guān)于“如何搭建一個(gè)字符串包裹函數(shù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI