1. 程式人生 > 實用技巧 >面試題 01.02. 判定是否互為字元重排

面試題 01.02. 判定是否互為字元重排

給定兩個字串 s1 和 s2,請編寫一個程式,確定其中一個字串的字元重新排列後,能否變成另一個字串。

示例 1:

輸入: s1 = "abc", s2 = "bca"
輸出: true
示例 2:

輸入: s1 = "abc", s2 = "bad"
輸出: false
說明:

0 <= len(s1) <= 100
0 <= len(s2) <= 100

可以使用將一個數組轉為list,然後從第二個陣列開始找,每找一個字元,就在list中對應刪除一個,若list中沒有,則說明兩個字串元素不一致,不能重新排列

這裡也可以額外建立一個數組,陣列下標為對應ASCII碼序號,陣列大小為字串中可以使用的字元數量(如a~z為26),然後遍歷一次,s1每遇到一個字元則對應下標++,s2每遇到一個字元則對應下標--,遍歷完成後再便利一次陣列,若陣列中存在不為0的元素則s2不能重排列為s1

class Solution {
    public boolean CheckPermutation(String s1, String s2) {
        if (s1==null|| s1=="" || s2 == null|| s2 == ""|| s1.length()!=s2.length()){
            return false;
        }
        List<String> s1List =new ArrayList<>(Arrays.asList(s1.split("")));
        List<String> s2List = Arrays.asList(s2.split(""));
        
for (String s : s2List) { int i = s1List.indexOf(s); if (i<0){ return false; } s1List.remove(i); } return true; } }