您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何返回第一個找到符合條件的字符”,在日常操作中,相信很多人在如何返回第一個找到符合條件的字符問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何返回第一個找到符合條件的字符”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
針對給定的一個字符串 s,你需要寫一個算法,返回給定字符串中不重復字符。
這個題目在隨后的面試中又出來變種。
這次需要函數返回的找到的字符串,同時輸入的字符串中還有大小寫。
另外,因為在線編譯器的限制,你又不能使用 HashMap。
使用 Java 來說還是相對比較好處理的。
解題思路也比較簡單,你需要使用一個中間變量來存儲,首先還是需要將進行處理的字符串轉換為 char 的數組。
然后在數組中拿到第一個字符。
當你拿到第一個字符的時候,你做這樣一件事情,將這個字符對目標字符串進行替換為 “”;
如果有相同的,那么肯定會被替換掉,同時你再考慮替換掉一次大寫的,一次小寫的。
如果有大寫字母相同的,那么也會被替換掉。
例如字符串 “serTSSEr”,那么你在完成后上面的算法后,假設我們對比第一個要替換的字符是 s,那么完成后算法后的字符串為 “erTEr”。
我們發現字符串的長度就不是原始長度 -1 了,因為你替換了多個字符串,因此可以知道這個被查找的字符是重復的。
當我們循環到字符 T 的時候,我們會發現完成后算法后的字符串長度就是原始輸入字符串長度 -1,那么我們就知道 T 就是我們需要輸出的字符了。
需要注意的是特殊情況 “ssee” 這種情況,如果你循環到最后,可能會發現原始字符的長度和完成整個循環后字符的長度沒有變化,那么說明所有的字符都有重復,那么你應該返回 “”。
為了減少搜索次數,你可以在完成后第一次替換后的余下的字符串中進行算法查找和替換,因為這個算法值需要找到字符,并不需要你輸出下標。
因此在循環中,下次需要查找的字符串長度就減少了,算法的效率也就更高了。
完整測試代碼,請參考題目中的 GitHub 鏈接地址:https://github.com/cwiki-us-docs/java-tutorials/blob/master/toolkits/codebank/src/test/java/com/ossez/toolkits/codebank/tests/leetcode/LeetCode0387FirstUniqueCharacterTest.java
我們這里將這個測試方法寫在下面供需要的童鞋參考。
/** * Return the first Uniq Char String without using Map * @param data * @return */ private String firstUniqCharString(String data) { // NULL CHECK if (data.equals("")) { return ""; } char[] strArray = data.toCharArray(); String retStr = ""; if (data.length() == 1) { retStr = data; } for (int i = 0; i < strArray.length; i++) { String valStr = Character.toString(strArray[i]); String rData = data; rData = data.replace(valStr, ""); rData = rData.replace(valStr.toUpperCase(Locale.ROOT), ""); rData = rData.replace(valStr.toLowerCase(Locale.ROOT), ""); if (rData.length() == 0) { retStr = ""; } else if (rData.length() + 1 == data.length()) { retStr = valStr; break; } } return retStr; }
到此,關于“如何返回第一個找到符合條件的字符”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。