第五章 字串專題 ---------------- 5.3 走出思維誤區:變形詞問題
題目:
給定兩個字串,請編寫程式,確定其中一個字串的字元重新排列後,能否變成另一個字串。
程式碼:
import java.util.Arrays;
/*
變形詞:兩個串有相同的字元及數量組成 abc abc ,abc cba,aabcd bcada;
給定兩個字串,請編寫程式,確定其中一個字串的字元重新排列後,能否變成另一個字串。
* 這裡規定大小寫為不同字元,且考慮字串中的空格。保證兩串的長度都小於等於5000。
測試樣例:
"Here you are","Are you here"
返回:false
*/
public class Same {
public static void main(String[] args) {
String A = "abcdd";
String B = "cbaddd";
System.out.println("解法一:"+checkSam_1(A, B));
System.out.println("解法二:"+checkSam_2(A, B));
}
/**
* 解法一、時間複雜度為O(NlgN)
*/
public static boolean checkSam_1(String stringA, String stringB) {
int len1 = stringA.length();
int len2 = stringB.length();
if (len1 != len2) {
return false;
}
// 轉成字元陣列
char[] arr1 = stringA.toCharArray();
char[] arr2 = stringB.toCharArray();
// 對它們排序
Arrays.sort(arr1);
Arrays.sort(arr2);
return Arrays.equals(arr1, arr2);
}
/**
* 解法二、時間複雜度為 O(N)
*/
static boolean checkSam_2(String stringA,String stringB){
int []helper = new int[128]; // 這裡有一個巧妙解法 只用一個輔助空間
char[] charArrA = stringA.toCharArray();
char[] charArrB = stringB.toCharArray();
for (int i = 0; i < charArrA.length; i++) {
helper[charArrA[i]]++;
}
for (int i = 0; i < charArrB.length; i++) {
helper[charArrB[i]]--;
if (helper[charArrB[i]]<0) { // B 比 A 多 在輔助空間相同位置上
return false;
}
}
for (int i = 0; i < helper.length; i++) {
if(helper[i]>0){ // A 比 B 多 在輔助空間相同位置上
return false;
}
}
return true;
}
}
相關文章
- 第五章 字串專題 ---------------- 5.7 題解:旋轉詞字串
- 第五章 字串專題 ---------------- 5.8 題解:將字串中按單詞翻轉字串
- 錯誤思維導向致IT專案問題多
- 第五章 字串專題 ---------------- 5.5 題解:壓縮字串字串
- 第五章 字串專題 ---------------- 5.2 題解:巧妙翻轉字串字串
- 思維題專項訓練
- 區間問題(非DP型別)及變形型別
- 走出專案經理的誤區
- 第五章 字串專題 ---------------- 5.12 字串匹配之PabinKarp字串匹配
- 第五章 字串專題 ---------------- 字串匹配(二)----KMP演算法字串匹配KMP演算法
- 第五章 字串專題 ---------------- 5.1 題解:判斷字串有無重複字元字串字元
- 第五章 字串專題 ---------------- 5.11 題解:最短摘要的生成字串
- 第五章 字串專題 ---------------- 5.10 題解:神奇的迴文串字串
- 第五章 字串專題 ---------------- 5.6 解題:判斷兩字串的字符集是否相同字串
- 第五章 字串專題 ---------------- 5.4 實踐:替換字串中的空格字串
- 第五章 字串專題 ---------------- 字串匹配(三)----字尾陣列演算法字串匹配陣列演算法
- 第五章 字串專題 ---------------- 5.9 題解:去掉字串中連線出現的k次的0字串
- 字串專題字串
- 專題:字串字串
- 字串問題字串
- mysql的時區錯誤問題MySql
- 挑選方案問題(牛客競賽 思維題+推導公式)公式
- 組合計數思維題
- IT專案管理的六種錯誤思維專案管理
- 分割字串問題字串
- 字串匹配問題字串匹配
- 字串排序問題字串排序
- 以Top-Down思維去解決問題——遞迴遞迴
- [已結束] [專題講座] 反向思維,資深專家指導你如何將網站變慢網站
- 【專題訓練】字串字串
- 關於PHP 時區錯誤的問題PHP
- 字串匹配模式問題字串匹配模式
- 第五章EJB釋出的問題
- 樹形問題選講
- 金山詞霸取詞pdf檔案問題
- 怎麼凸顯主題?極思維
- 測試筆試邏輯思維題筆試
- iOS-邏輯思維面試題01iOS面試題