leetcode205. 同构字符串 一般人一次做不对的简单题

给定两个字符串 s 和 t,判断它们是否是同构的。

如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。

所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

示例 1:

输入: s = "egg", t = "add"
输出: true
示例 2:

输入: s = "foo", t = "bar"
输出: false
示例 3:

输入: s = "paper", t = "title"
输出: true
说明:
你可以假设 s 和 t 具有相同的长度。

思路:见代码:我们记住每一个s中出现的字符,和对应的t中的字符。

在之后的遍历中,要么在s中遇到新的字符,要么符合之前的记录。否则是false。

 然后就凉了。

后来想了一下:比如ab和aa,从s到t的角度看:a对应a,b对应a,检查的没毛病。

但是从t到s的角度看:a对应了a和b两个字符,明显不对。

所以同样的代码逻辑应该正着跑一遍,反着跑一遍。

class Solution {public boolean isIsomorphic(String s, String t) {return isIsomorphicHelper(s, t) && isIsomorphicHelper(t, s);}private boolean isIsomorphicHelper(String s, String t) {int n = s.length();HashMap<Character, Character> map = new HashMap<>();for (int i = 0; i < n; i++) {char c1 = s.charAt(i);char c2 = t.charAt(i);if (map.containsKey(c1)) {if (map.get(c1) != c2) {return false;}} else {map.put(c1, c2);}}return true;}
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:32---IO库

一、IO库 I0库类型和头文件头文件类型iostreamistream,wistream从流读取数据ostream,wostream向流写入数据iostream,wiostream读写流fstreamifstream,wifstream从文件读取数据ofstream,wofstream向文件写入数据fstream,wfstream读写文件sstreamistringstream,wistringst

leetcode209. 长度最小的子数组 借这个题规范一下双指针写法

给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组&#xff0c;返回 0。 示例: 输入: s 7, nums [2,3,1,2,4,3] 输出: 2 解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组…

C++(STL):01---pair容器

一、pair历史概述 C++标准库的第1版(C++98),提供了一个简单的class,用来处理类型不同的两个(一对)值,这个就是pair。到了C++11,pair被重新定义,有了很大扩展pair与tuple:tuple在TR1被引入,它是对pair的扩展tuple在后面详细概述。二、pair概述 特点: 一个pair保存两…

C++(STL):02---tuple容器

一、tuple的历史概述 Tuple是TR1引入的东西,它扩展了pair的概念,拥有任意数量的元素。在C++11标准之前,tuple最多带有10个类型不同的元素C++11,tuple被重新定义,采用variadic template概念,被设计为可用于任意大小的异质集合二、tuple概述 tuple与pair类似,也是一个模板…

C++(STL):06---数值的极值(numeric_limits类)

一、数值的极值概述 数值类型有着与平台相依的极值C++标准规定了各种类型必须保证的最小精度。这些最小值如下图所示: 类型最小长度char1byte(8bits)shortint2bytesint2byteslongint4bytes

leetocde 225. 用队列实现栈

使用队列实现栈的下列操作&#xff1a; push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。 你所使用的语…

C++(STL):03---智能指针之shared_ptr

一、shared_ptr类 头文件:#include<memory>智能指针,是一个模板。创建智能指针时,必须提供指针所指的类型如果当做前提条件判断,则是检测其是否为空shared_ptr<string> p1; //指向string shared_ptr<list<int>> p2;//指向int的list if(p1 &&…

C++(STL):05---智能指针之unique_ptr

一、unique_ptr类 头文件:#include<memory>智能指针,是一个模板。创建智能指针时,必须提供指针所指的类型与shared_ptr的不同之处: shared_ptr所指向的对象可以有多个其他shared_ptr智能指针而unique_ptr所指向的对象只能有一个unique_ptr指针,也就是自己。当unique…

JAVA中int、String的类型转换

int -> String int i12345; String s""; 第一种方法&#xff1a;si""; 第二种方法&#xff1a;sString.valueOf(i); 这两种方法有什么区别呢&#xff1f;作用是不是一样的呢&#xff1f;是不是在任何下都能互换呢&#xff1f; String -> int s"…

leetcode 231. 2的幂

给定一个整数&#xff0c;编写一个函数来判断它是否是 2 的幂次方。 示例 1: 输入: 1 输出: true 解释: 20 1 示例 2: 输入: 16 输出: true 解释: 24 16 示例 3: 输入: 218 输出: false 本题思路转载位运算的常用技巧&#xff1a;lowbit运算&#xff0c;包含lowbit公式、…

C++(STL):04---智能指针之weak_ptr

一、概念weak_ptr是一种不控制所指向对象生存期的智能指针&#xff0c;它指向一个shared_ptr管理的对象拥有“弱”共享的特点最重要的特点一个对象被多个shared_ptr类所指向时&#xff0c;就会拥有多个引用计数但是当weak_ptr指向一个shared_ptr类所指向的对象时&#xff0c;该…

C语言: const关键字与指针

const修饰指针的4种形式 const关键字,在C语言中用来修饰变量,表示这个变量是常量。const修饰指针有4种形式,区分清楚这4种即可全部理解const和指针。第一种:const int *p;第二种:int const *p;第三种:int * const p;第四种:const int * const p;ation ‘*p4’ // 第一种…

leetcode268. 缺失数字

给定一个包含 0, 1, 2, ..., n 中 n 个数的序列&#xff0c;找出 0 .. n 中没有出现在序列中的那个数。 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8 说明: 你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现? 众所周知&#…

C++(STL):07---vector之使用方式和常规用法

简单两三句话说下vector(一般领导讲话都说简单说两句,结果说了一个钟头): 介绍 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是…

leetcode276. 栅栏涂色

有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏&#xff0c;每个栅栏柱可以用其中一种颜色进行上色。 你需要给所有栅栏柱上色&#xff0c;并且保证其中相邻的栅栏柱 最多连续两个 颜色相同。然后&#xff0c;返回所有有效涂色的方案数。 注意: n 和 k 均为非负的整数。 示例…

C++(STL):11---vector源码剖析

一、vector概述 vector的使用语法可以参考文章之前的几篇文章,总的来说:vector是可变大小数组特点:支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢元素保存在连续的内存空间中,因此通过下标取值非常快在容器中间位置添加或删除元素非常耗时一旦vector内存不足,…

C++(STL):09---vector迭代器失效问题

在vector中,我们经常会使用迭代器iterator对vector中的元素进行索引,也经常需要将迭代器作为参数传递到vector的成员函数中,迭代器使用非常方便,但使用不当也会给我们带来巨大的麻烦,下面就深入分析vector迭代器失效的场景 push_back导致迭代器失效 Release模式下能正常…

leetcode278. 第一个错误的版本

你是产品经理&#xff0c;目前正在带领一个团队开发新的产品。不幸的是&#xff0c;你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的&#xff0c;所以错误的版本之后的所有版本都是错的。 假设你有 n 个版本 [1, 2, ..., n]&#xff0c;你想找出导…

C++(STL):08---vector元素访问

本文将给大家带来分享:vector中访问元素和迭代器失效问题,这两部分是在日常工作开发中经常遇到,也是容易犯错的地方,同时也是在面试过程中经常被问到的。 1.访问vector容器中单个元素 首先,vector 容器可以向普通数组那样访问存储的元素,甚至对指定下标处的元素进行修改,…

leetcode253. 会议室 II

给定一个会议时间安排的数组&#xff0c;每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],...] (si < ei)&#xff0c;为避免会议冲突&#xff0c;同时要考虑充分利用会议室资源&#xff0c;请你计算至少需要多少间会议室&#xff0c;才能满足这些会议安排。 示例 …