[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.
解题方法:
该题意是判断两个字符串s和t是否是同构的。(注意字符不仅是字母)
最简单的方法是通过计算每个字符出现的个数并且相应位置字母对应,但是两层循环肯定TLE。所以需要通过O(n)时间比较,采用的方法是:
eg: "aba" <> "baa" return false
关键代码:nums[s[i]]=t[i] numt[t[i]]=s[i] 再比较是否相同
nums['a']='b' numt['b']='a' (第一次出现)
nums['b']='a' numt['a']='b' (第一次出现)
nums['a']='b' <> t[2]='a' (第二次出现) return false
该方法技巧性比较强,当然如果你使用C++的映射就非常容易实现了。
我的代码:
bool isIsomorphic(char* s, char* t) {int ls,lt; //字符串长度int i,j;int nums[256]={0};int numt[256]={0};ls = strlen(s);lt = strlen(t);if(ls!=lt) return false;for(i=0; i<ls; i++) {//初值为0if(nums[s[i]]==0) {if(numt[t[i]]==0) {nums[s[i]] = t[i];numt[t[i]] = s[i];}else {return false;}}else {if(nums[s[i]]!=t[i]) {return false;}}}return true;
}
C++推荐代码:
参考:http://www.cnblogs.com/easonliu/p/4465650.html
题目很简单,也很容易想到方法,就是记录遍历s的每一个字母,并且记录s[i]到t[i]的映射,当发现与已有的映射不同时,说明无法同构,直接return false。但是这样只能保证从s到t的映射,不能保证从t到s的映射,所以交换s与t的位置再重来一遍上述的遍历就OK了。
class Solution {
public:bool isIsomorphic(string s, string t) {if (s.length() != t.length()) return false;map<char, char> mp;for (int i = 0; i < s.length(); ++i) {if (mp.find(s[i]) == mp.end()) mp[s[i]] = t[i];else if (mp[s[i]] != t[i]) return false;}mp.clear();for (int i = 0; i < s.length(); ++i) {if (mp.find(t[i]) == mp.end()) mp[t[i]] = s[i];else if (mp[t[i]] != s[i]) return false;}return true;}
};
(By:Eastmount 2015-9-21 凌晨1点半 http://blog.csdn.net/eastmount/)
[LeetCode] Isomorphic Strings - 字符串操作:数组计数字符个数问题相关推荐
- 实现一个输入程序,接收从 键盘读入的字符串。当字符串中所含字符个数少于程序设定的上限时,输出这个字符串;否则抛出MyStringException1异常,在异常处理中要求重新输入新的字符串或者中断程序
实现一个输入程序,接收从 键盘读入的字符串.当字符串中所含字符个数少于程序设定的上限时,输出这个字符串:否则抛出MyStringException1异常,在异常处理中要求重新输入新的字符串或者中断程序 ...
- Golang标准库-strings 字符串操作
字符串处理 字符串在开发中经常用到,包括用户输入,数据库读取数据,我们经常需要对字符串进行分割,连接,转换的等操作 字符串操作 前缀和后缀 HasPrefix判断字符串是否以prefix开头 函数签名 ...
- C语言 字符串(计算长度、统计字符个数、复制、连接、删除)核心代码全网最强汇总!
索引(均为指针函数调用形式) 一.计算字符串长度 方法一 方法二 二.统计字符个数 三.字符串复制 方法一 方法二 四. 字符串连接 五.字符串删除 一.计算字符串长度 方法一 核心代码: char ...
- CodeForces - 985F Isomorphic Strings(字符串哈希)
题目链接:点击查看 题目大意:首先规定同构字符串,若字符串s和字符串t互为同构字符串,则必须满足: 两个字符串长度相同 s中的字符种类数与t中的字符种类数相同 s中的每一个字母在t中都有对应,且必须是 ...
- cmake字符串转数组_掌握常用的数据结构之数组和字符串
点击上方蓝字设为星标 每周一.三.五上午 8:30 准时推送 下面开始今天的学习- 数组和字符串 所谓数组,是有序的元素序列.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用 ...
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
C语言字符串操作函数 1. 字符串反转 - strRev 2. 字符串复制 - strcpy 3. 字符串转化为整数 - atoi 4. 字符串求长 - strlen 5. 字符串连接 - strca ...
- python字符串操作
str.upper() ...
- C语言字符串操作函数
引用自: http://www.cnblogs.com/JCSU/articles/1305401.html 1. 字符串反转 - strRev 2. 字符串复制 - strcpy 3. 字符串转化为 ...
- arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」
今天分享的题目来源于 LeetCode 第 421 号问题:数组中两个数的最大异或值.在 异或 这个知识点里面属于一个中高难度的题目. 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, ...
最新文章
- 从线上教育的如火如荼,反思传统培训行业的未来发展
- springboot创建parent_Springboot 框架整理,建议做开发的都看看,整理的比较详细!...
- 十三、熵编码算法(3):CAVLC原理
- Spring 的3种依赖注入方式
- 大家放松下,仿《大腕》经典对白
- 判断两个数组中是否存在相同的数字
- Nagios 监控平台快速安装
- perf in linux,[Package Request] 仓库请添加 linux-perf-5.4
- won10qualcomm atheros无线网卡驱动安装不了
- TB6612驱动和MG513P3012V电机
- 1089. 烽火传递
- 雷蛇2020年上半年表现远胜预期收益创新高达4.475亿美元经调整息税折旧摊销前盈利(Adjusted EBITDA)为320万美元
- [总结]CSS/CSS3常用样式与web移动端资源
- 基于RNN的序列化推荐系统总结
- PyTorch RuntimeError: size mismatch, m1:
- “湖南索御文化传媒”新闻发布会即将启动
- Can't clobber writable file **************
- dom4j解析xml,dom4j创建xml
- 一文带你了解火爆的区块链互联网Cosmos
- 6691. 【2020.06.05省选模拟】六道剑「一念无量劫」
热门文章
- oracle数据类型大小限制
- [js高手之路]从零开始打造一个javascript开源框架gdom与插件开发免费视频教程连载中...
- webstorm快捷键说明
- WebView三个方法区别(解决乱码问题)
- [ExtJS5学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding
- [WP7开发入门]在Windows 2003,XP上安装Windows Phone 7开发工具
- HTTP 知识点之一:头部解释(转)
- java访问jar中的资源问题代码
- macos server 恢复安装_Go语言:Docker安装及运行consul节点
- docker -v 覆盖了容器中的文件_springboot配合maven打成可执行jar,构建镜像部署到docker容器中...