標籤:equal put nbsp info 建立 否則 區別 pre sub
一、題目
1、審題
2、分析
判斷等長的字串 s 與 t ,其中的字元是否有一一對應的關係。其中 s 中的一個字元只能對應對應 t 中的特定的一個字元。
二、解答
1、思路:
方法一、
使用一個 Map , key 為 s 中的字元, value 為 t 中的字元。
過程如下;
、判斷 Map 中是否存在 key,
若不存在,判斷是否存在此 value;
若存在,則返回 false;
否則,放入此 key-value。
若存在,判斷對應的 value 是否和 t 的字元相同,
若是,則繼續遍曆;
否則,返回 false;
public boolean isIsomorphic(String s, String t) { // 1、替換字元 HashMap<String, String> map = new HashMap<>(); for (int i = 0; i < s.length(); i++) { String str1 = s.substring(i, i + 1); String str2 = t.substring(i, i + 1); if(!map.containsKey(str1)) { // 2、是否有重複的 value if(map.values().contains(str2)) return false; map.put(str1, str2); } else if(!(map.get(str1).equals(str2))) { return false; } } return true; }
方法二、
①、建立兩個整形數組 m1 與 m2,分別存放 s 中字元對應 ASCII 值對應的 s 的下標,和 t 中字元對應 ASCII 值對應的下標,且初值均為 0;
②、遍曆 s 與 t 中字元,判斷這兩個字元對應的數組值是否相等,若不相等,則返回 false, 否則賦給當前下標。
注意: 為了區別下標為 0 的字元,儲存在數組中的下標值從 1 開始
public boolean isIsomorphic(String s, String t) { int len = s.length(); int[] m1 = new int[256]; int[] m2 = new int[256]; for (int i = 0; i < len; i++) { char c1 = s.charAt(i); char c2 = t.charAt(i); if(m1[c1] != m2[c2]) return false; m1[c1] = i + 1; m2[c2] = i + 1; } return true; }
205. Isomorphic Strings