因为字母只有26个,用一个数组就可以,不用map
我手上没有java,用C#写一个给你,思路一样,你自己修改成java的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Q693096
{
class Program
{
static void Main(string[] args)
{
string[] ss = { "egg", "foo", "paper" };
string[] ts = { "add", "bar", "title" };
for (int i = 0; i < ss.Length; i++)
{
Console.WriteLine("s={0}, t={1}, result={2}", ss[i], ts[i], isIsomorphic(ss[i], ts[i]));
}
}
static public bool isIsomorphic(string s, string t)
{
s = s.ToLower();
t = t.ToLower(); //如果可以假设s t都是小写,这两行可以删除
char[] arr = new char[26];
for (int i = 0; i < 26; i++) arr[i] = '#';
for (int i = 0; i < s.Length; i++)
{
if (arr[s[i] - 'a'] != '#')
{
if (arr[s[i] - 'a'] != t[i])
return false;
}
else
{
for (int j = 0; j < 26; j++)
if (arr[j] == t[i])
return false;
arr[s[i] - 'a'] = t[i];
}
}
return true;
}
}
}