新年度开始了,开始真剑努力毕业+就职。
定个小目标:每日一题
多谢鸡桑提醒国际服早上刷新,让我在半夜打卡成功,很好很贴心
算了以后还是放github吧,两边搬怪麻烦的
Description
Given two strings s and t, determine if they are isomorphic.
Two strings s and t 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.
Example 1
Input: s = "egg", t = "add"
Output: true
Example 2
Input: s = "foo", t = "bar"
Output: false
Example 3
Input: s = "paper", t = "title"
Output: true
Constraints
1 <= s.length <= 5 * 1 0 4 10^4 104
t.length == s.length
s and t consist of any valid ascii character.
Solution
对于很久没写代码且只会暴力的我来说也是很简单的一道题。
思路大概是:首先将s和t的字符对应,发现同一个字符的第二种对应返回false,无事终了再将t和s重复上述步骤。无事终了返回true。
需要注意的一点是:判断是否出现过该字符的对应时,使用了map.count()
错误解法:判断是否为空(由于不知道map初始化无法用’ ‘判断
直接来看代码段:
class Solution {
public:
bool isIsomorphic(string s, string t)
{
map<char,char>m;
map<char,char>n;
for(int i=0;i<s.length();++i)
{
if(m.count(s[i]))
{
if(m[s[i]]!=t[i]) return false;
}
else m[s[i]]=t[i];
}
for(int i=0;i<t.length();++i)
{
if(n.count(t[i]))
{
if(n[t[i]]!=s[i]) return false;
}
else n[t[i]]=s[i];
}
return true;
}
};