程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode -- Isomorphic Strings

LeetCode -- Isomorphic Strings

編輯:C++入門知識

LeetCode -- Isomorphic Strings


題目描述:
Given two strings s and t, determine if they are isomorphic.


Two strings are isomorphic if the characters in s can be replaced to get t.


All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.


For example,
Given egg, add, return true.


Given foo, bar, return false.


Given paper, title, return true.


Note:
You may assume both s and t have the same length.


判斷同構字符串。 就是兩個字符串長度相同,並且每一位被相同的字符替代後所得的新字符串相等,這樣的字符串是同構字符串。




思路:
長度不等直接返回false。
兩個哈希表hash1 和has2。 hash1 : 遍歷第一個字符串的同時,記錄當前字符最後一次出現的位置。
如果hash1中包含了s[i],那麼hash2也一定要包含t[i]並且hash1[s[i]](s[i]最後一次出現的位置)也要等於hash2[t[i]](t[i]最後一次出現的位置)。
如果hash1中沒有包含s[i],那麼hash2也一定不能包含t[i]。


實現代碼:




public class Solution {
    public bool IsIsomorphic(string s, string t) {
        var hash1 = new Dictionary();
		var hash2 = new Dictionary();
		
		for(var i = 0;i < s.Length; i++){
			if(!hash1.ContainsKey(s[i])){
				hash1.Add(s[i], i);
				if(hash2.ContainsKey(t[i])){
					return false;
				}
				hash2.Add(t[i],i);
			}
			else{
				if(!hash2.ContainsKey(t[i]) || hash2[t[i]] != hash1[s[i]]){
					return false;
				}
				hash1[s[i]] = i;
				hash2[t[i]] = i;
			}
		}
		
		return true;
    }
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved