规则:2个字符串,a和b,它们都由ASCII字符和非ASCII字符组成(例如,中文字符gbk编码).
If the non-ASCII chars contained in b also show up in a and no less than the times they appear in b, then we say b is similar with a.
Run Code Online (Sandbox Code Playgroud)
例如:
a = "ab?ef?jkl??" //non-ASCII chars:'?'(twice), '?'(once), '?'(once)
b = "bej???" //non-ASCII chars:'?'(twice), '?'(once)
c = 'lk???' //non-ASCII chars:'?'(3 times, more than twice in a)
Run Code Online (Sandbox Code Playgroud)
根据规则,b与a类似,但c不是.这是我的问题:我们不知道a和b中有多少非ASCII字符,可能很多.因此,为了找出a和b中出现非ASCII字符的次数,我应该使用哈希表来存储它们的出现时间吗?以字符串a为例:
[non-ASCII's hash-value]:[times]
?'s hash-val : 2
?'s hash-val : 1
?'s hash-val : 1
Run Code Online (Sandbox Code Playgroud)
检查字符串b,如果我们在b中遇到非ASCII字符,然后哈希它并检查一个哈希表,如果字符串存在于哈希表中,那么它的出现次数会减少1.如果出现次数小于0(-1),那么我们说b与a不相似.
还是有更好的方法吗?
PS: 我逐字节读取字符串,如果字节小于128,那么我将其作为ASCII字符,否则我将其作为非ASCII字符(多字节)的一部分.我正在做的是找出非ASCII字符.这样对吗?