[LeetCode] Isomorphic Strings

2049 단어 자바LeetCodeC++
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.
생각:
1. hash table 사용 하기;
2. s 의 문자 와 t 의 문 자 를 매 핑 관 계 를 만 듭 니 다. 문자 가 나타 나 는 순서에 따라 매 핑 을 만 들 고 한 문 자 는 한 글자 만 매 핑 할 수 있 습 니 다.그러므로 매 핑 관계 에서 키 와 값 은 모두 유일한 것 이다.
3. 예 를 들 어 foo, bar 에서 f - b, o - a, o - r, 같은 o 맵 두 글자 이기 때문에 조건 에 부합 되 지 않 습 니 다. 
자바 와 C++ 구현:
public class Solution {
    public boolean isIsomorphic(String s, String t) {
        Map<String, String> myMap = new HashMap<String, String>();
		for(int i = 0; i < s.length(); i ++){
			String tmps = s.substring(i,  i+1) ;
			String tmpt = myMap.get(tmps) ;
			if(tmpt != null){
				if(!tmpt.equals(t.substring(i,  i+1))) return false ;
			}else{
				if(myMap.containsValue(t.substring(i, i+1))) return false ;
				myMap.put(s.substring(i, i+1), t.substring(i, i+1)) ;
			}
		}
		return true ;
    }
}
class Solution {
public:
    bool isIsomorphic(string s, string t) {
        if(s == "" && t == "") return true ;
        map<char, char> mymap ;
		for(int i = 0; i < s.size(); i ++){
			if(mymap.find(s[i]) != mymap.end()){
				if(mymap[s[i]] != t[i]) return false ;
			}else{
				map<char, char>::iterator p ;
				for(p = mymap.begin(); p != mymap.end(); p ++){
					if(p->second == t[i]) return false ;
				}
				mymap[s[i]] = t[i];
			}
		}
    }
};

좋은 웹페이지 즐겨찾기