檢查兩個字符串是否為 Anagram 的 Java 程序字謎程序

已發表: 2021-07-23

目錄

關於 Java 的鮮為人知的事實

作為最耐用的編程語言之一,Java 因其強大而靈活的特性而在全球範圍內使用。 Java 的穩定性和多功能性使其成為最受歡迎的編程語言之一。 然而,關於這種安全編程語言還有幾個鮮為人知的事實。 讓我們了解其中的幾個。

  • Oak 是 Java 的原始名稱。
  • 在學習這種編程語言的同時,你可以賺很多錢。
  • Java 是世界上人口第二多的編程語言,第一是 C。
  • 全世界約有 30 億台設備正在使用 Java。
  • Java 是一種區分大小寫的編程語言。 即,Java 代碼中的“Final”和“final”是不一樣的。 閱讀更多關於為什麼 java 如此受開發人員歡迎的信息。

字謎概述

如果通過重新排列其字符將一個字符串轉換為另一個字符串,則稱這兩個字符串是彼此的字謎。 但是,初始字符串中的字符數和得到的字符串應該是相同的。 為了更好地理解字謎的概念,讓我們考慮兩個字符串,“上帝”和“狗”。

字符串 'god' 和 'dog' 是彼此的字謎,因為只需交換字符 'd' 和 'g' 的位置,就可以重新排列前一個字符串以獲得後一個字符串。 對於任意兩個輸入字符串,計算每個字符出現的頻率以檢查字符串是否是彼此的字謎。 因此,字符串的變位詞可以定義為任何其他字符串,其具有與輸入字符串中任何序列中相同字符且頻率相同的字符。

Java Anagram 程序的算法

第 1 步:定義兩個輸入字符串。

第二步:確定每個字符串的長度。 如果輸入字符串具有不同的字符串長度,則它們不是彼此的字謎。

步驟 3:如果字符串長度相同,則將字符串字符轉換為小寫字母,以確保比較容易。

步驟 4:字符串字符要么通過內置函數排序,要么轉換為字符數組然後排序。

第 5 步:檢查排序後的字符數組是否相等。

Java中Anagram程序的實現

有幾種解決方案可以實現代碼來判斷兩個字符串是否是字謎。 對於後續部分中討論的每個解決方案,上述算法的第 2 步構成了基礎,如果字符串長度不匹配,則有助於提前退出。 在接下來的部分中,讓我們更多地了解為字謎邏輯編寫代碼的不同類型。

排序方法

可以對每個輸入字符串的字符進行排序,得到兩個歸一化的字符數組。 如果兩個輸入字符串的歸一化數組相同,則這些字符串被認為是彼此的字謎,反之亦然。

這段代碼的理解和實現更容易。 上述解決方案的時間複雜度為 O(n log n),並且需要額外的空間來存儲輸入字符串的字符數組。

從世界頂級大學在線學習軟件開發課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

實現字謎邏輯的計數方法

在這種方法中,測量兩個輸入字符串中每個字符的存在次數。 如果兩個字符串中每個字符的頻率相同,則這些字符串是彼此的字謎。

讓我們建立一個直方圖來節省一些內存。 在第一個字符串中,每個字符的計數遞增,而第二個字符的計數遞減。 如果最終結果將一切都平衡為零,那麼字符串就是字謎。

該解決方案比之前的解決方案執行得更快,其時間複雜度為 O(n)。 但是,需要額外的空間來計算字符數。 此解決方案實際上僅對具有較小字符範圍的字符串有效。 這個解決方案的另一個事實是它使用了有限數量的內置 Java 函數,因此增加了代碼的長度。

結帳: Java 項目的想法和主題

通過檢查 MultiSet 來確定 Anagrams

使用 MultiSet(一個幫助與相同元素進行與順序無關的比較的集合)簡化了此解決方案中的計數和比較過程。

每個輸入字符串最初都被轉換為一個 MultiSet 字符,然後檢查奇偶校驗。

該解決方案的時間複雜度為 O(n)。 它類似於確定字謎的計數方法。 但是,它可以有效地處理更大長度的字符串。 此外,編碼涉及更多的 Java 庫函數。

基於字母的方法來確定字謎

到目前為止討論的所有解決方案都將標點符號視為字符串的一部分。 此外,這些解決方案區分大小寫。 基於字母的方法實現了一個代碼,以根據字謎的語言定義檢查輸入字符串。 在這種方法中,空格和標點符號不被視為輸入字符串的一部分。

實施基於字母的解決方案的第一步是消除不需要的字符並將所有有效字符轉換為小寫字母。 在這一步之後,可以使用上面討論的任何實現來檢查字符串是否是字謎。

如果您有興趣了解有關 Java、全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的軟件開發執行 PG 計劃——全棧開發專業化,專為工作專業人士設計,提供 500 多個小時的嚴格培訓, 9+ 項目和任務,IIIT-B 校友身份,實用的實踐頂點項目和頂級公司的工作協助。

踏上夢想的工作

從 IIIT-B 申請軟件開發執行 PG 計劃