数据结构与算法复习-----leetcodeOJ题解

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.

说明:LeetCode OJ is a platform for preparing technical coding interviews. Pick from an expanding library of more than 190 questions, code and submit your solution to see if you have solved it correctly. It is that easy!

题目分析:判断两个字符串是否同构。

  解题思路:使用两个hashmap,map和map1一个放置s到t的映射,另一个放置t到s的映射,循环遍历两个字符串的每个字符,key和value分别等于s和t的第i个字符,如果map中已经存在当前的key,则需要判断value是否与map中取出的值是否相等,如果不相等直接return false;

这样就确保了s到t同一个字符不会映射到不同的字符上。同理,map1存放t到s的映射,确保t到s同一个字符不会映射到不同的字符上.

代码:

 1 public class Solution {
 2     public static boolean isIsomorphic(String s, String t) {
 3
 4             if(null==s&&null==t){
 5
 6                 return true;
 7             }
 8             if(s.length()!=t.length()){
 9
10                 return false;
11             }
12             //循环遍历两个字符串的每个字符,把s的每个字符当做键,t中的每个字符当做值,
13             //每次放入map之前,检查是否存在键,若存在,检查值是否相等,若相等,继续,若不等,返回false
14             Map<Character,Character> map=new HashMap<Character,Character>();
15             Map<Character,Character> map1=new HashMap<Character,Character>();
16             char key;
17             char value;
18             for(int i=0;i<s.length();i++){
19                 key=s.charAt(i);
20                 value=t.charAt(i);
21
22                 if(map.containsKey((Character)key)){
23                     if(value!=map.get((Character)key)){
24                         return false;
25                     }
26                 }else{
27                     if(map1.containsKey(value)){
28                          if(key!=map1.get((Character)value)){
29                              return false;
30                          }
31                     }
32                     map.put(key,value);
33                     map1.put(value, key);
34                 }
35             }
36             return true;
37         }
38 }
时间: 2024-11-07 05:18:25

数据结构与算法复习-----leetcodeOJ题解的相关文章

数据结构与算法复习(一) 排序算法(I)

这篇文章将会介绍最常见的排序算法(使用 JavaScript 语言实现) PS:这里我会尽量使用语言无关的语法去写,大家不要太在意语言,重要的是算法的实现思路 1.冒泡排序 将数组分为有序区(左边)和无序区(右边) 每次从无序区的最后一个元素开始,一直向前冒泡到无序区的第一个位置,使其变成有序 function swap(A, i, j) { if (i === j) return [A[i], A[j]] = [A[j], A[i]] } function bubbleSort(A) { fo

数据结构与算法复习

数据结构回顾与整理 复习资料<数据结构与算法 Javascript描述> 人民邮电出版社 数据结构与算法学的次数再多也不为过. 1,数组array:一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,来计算元素之间存储位置的偏移量. 除了常用的方法,ES5中新增加了几个迭代方法,forEach(),every()some(),reduce(),map(),filter(). 2.列表list:是一组有序数据.其中的数据项被称为 元素.包含属性/方法有listsize,pos(当

数据结构与算法复习第一天——基础概念,线性表

数据结构的一些基本术语: 数据:客观事物的符号表示 数据元素:数据集合中的一个个体 数据项 组成数据元素 数据对象是数据的子集 由相同性质的数据元素构成 数据结构:带有结构的数据元素的集合 数据结构可以用一个四元组表示(D,L,S,O) data ,logical structrue ,storage struction operation操作 L——集合,线性,树形,图形 S——存储结构,有顺序,链式,散列 线性表——线性结构,数据元素之间一对一的关系, N个具有相同类型的数据元素的有限序列

面试常考数据结构与算法

数据结构部分: 1.数组和链表的区别.(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中,用户使用数组之前无法确定数组的大小,只能够将数组定义成足够大小,这样数组的空间可能不被使用,从而造成内存空间的浪费.链表是一种常见的数据组织形式,他采用动态分配内存的形式实现.需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费. 从逻辑结构上来看

【数据结构与算法】一、三元组的代码实现

开始复习数据结构和算法,好长时间没写c了,顺便复习一下 三元组的表示与实现 #include<iostream> #include <stdlib.h> using namespace std; //函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 //函数结果类型 typedef int Status; //数

[0x01 用Python讲解数据结构与算法] 关于数据结构和算法还有编程

忍耐和坚持虽是痛苦的事情,但却能渐渐地为你带来好处. ——奥维德 一.学习目标 · 回顾在计算机科学.编程和问题解决过程中的基本知识: · 理解“抽象”在问题解决过程中的重要作用: · 理解并实现抽象数据结构: · 复习Python编程语言 二.写在前面 自第一台电子计算机使用线路和开关传达人类的指令以来,我们编程的思考方式有了很大的改变,在很多方面,计算机技术的发展为计算机科学家提供了众多的工具和平台去实现他们的想法.高性能理器,高速网络和大内存使得计算机研究者必须掌握在这样复杂的螺旋式通道中

数据结构与算法知识点

<转> 一.数据结构部分 1.数组和链表的区别.(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中,用户使用数组之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而造成内存空间的浪费.链表是一种常见的数据组织形式,它采用动态分配内存的形式实现.需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪

java数据结构与算法之递归思维(让我们更通俗地理解递归)

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53452971 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设计与实现 j

Java 数据结构与算法分析学习

由于之前面试android的时候考到了很多关于java的知识,所以这次重温数据结构知识就打算用java来学习,毕竟android是以java为基础的,而且我现在学习的j2ee架构也是以java为基础的. java中的类就是对现实世界的对象的一种抽象,例如人就是一个类别,人有名字,联系电话,住址等成员属性,人拥有说话,吃饭,走路等成员方法.类就是这样,定义了一种对象,它有什么,会做什么. 继承——子类就是父类的一种特定类别.例如学生就是人的子类,学生属于人,是特定的一类人.所以我们让学生继承人,这