力扣简205 同构字符串 半* ?
不知道映射是对应位置上必须一样!只是感觉需要有一个能形成的,比如add dda我认为也合理,只要变量个数可对应就行,理解错误。
然后自己写也用的map,但是按自己的理解只是写了统计个数,没有需要一一对应,且自己对于对应的value中个数的比较不会写,没有实现。
看了题解写了下面的解法,但是这个运行过于垃圾。而且我自己觉得,如果形如“egg”和“addw”,也会认为可以映射,不应该先判断一下两个字符串长度吗??


package leetcode01; //!!映射是对应位置上的! import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.swing.plaf.metal.MetalPopupMenuSeparatorUI; /*给定两个字符串s和t,判断它们是否是同构的。如果s中的字符可以按某种映射关系替换得到t,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。*/ public class Solution205 { //自己写的没有实现,不会写对应collection的比较 // public static boolean isIsomorphic(String s, String t) { // if(s.length()==0&&t.length()==0) // return true; // else if(s.length()==0||t.length()==0) // return false; // Map<Character, Integer> maps=new HashMap<Character,Integer>(); // Map<Character, Integer> mapt=new HashMap<Character,Integer>(); // maps.put(s.charAt(0), 1); // mapt.put(t.charAt(0), 1); // for(int i=1;i<s.length();i++) { // char c=s.charAt(i); // if(maps.containsKey(c)) { // maps.replace(c, maps.get(c)+1); // } // else // maps.put(c, 1); // } // for(int i=1;i<t.length();i++) { // char c=t.charAt(i); // if(mapt.containsKey(c)) { // mapt.replace(c, mapt.get(c)+1); // } // else // mapt.put(c, 1); // } // if(maps.size()==mapt.size()) { //// Collection<Integer> sets=maps.values(); //// Collection<Integer> sett=mapt.values(); //// System.out.println(sets.retainAll(sett)); //// System.out.println(sets.equals(sett)); //// if(sets.equals(sett)) { //// return true; //// } //不会写对应的value相同的比较 所以这个思路没有实现 // } // return false; // } public static boolean isIsomorphic(String s, String t) { Map<Character, Character> maps=new HashMap<Character,Character>(); Map<Character, Character> mapt=new HashMap<Character,Character>(); for(int i=0;i<s.length();i++) { char sWord = s.charAt(i); char tWord = t.charAt(i); if((maps.containsKey(sWord)&&maps.get(sWord)!=tWord)||(mapt.containsKey(tWord)&&mapt.get(tWord)!=sWord)) { return false; } maps.put(sWord, tWord); mapt.put(tWord, sWord); } return true; } public static void main(String[] args) { // TODO Auto-generated method stub String s="egg"; String t="addw"; System.out.print(isIsomorphic(s, t)); } }
去看评论里的题解了 确实有点牛!

public static boolean isIsomorphic(String s, String t) { for(int i = 0; i < s.length(); i++){ if(s.indexOf(s.charAt(i)) != t.indexOf(t.charAt(i))){//s.indexOf(ch) 返回ch在s中首次出现的位置 return false; } } return true; }

浙公网安备 33010602011771号