我尝试匹配
的某些条件我尝试在这些条件的基础上进行匹配,在测试长字符串或奇数字符串比较时仍然遇到问题。
def matchval_not_pos(str1, str2)
a1, a2 = str1.chars, str2.chars
[a1.size, a2.size].min.times do |i|
if a1[i] == a2[i]
a1.delete_at(i)
a2.delete_at(i)
end
end
a1.reduce(0) do |t,c|
i = a2.index(c)
if i
inc = 1
a2.delete_at(i)
else
inc = 0
end
t + inc
end
end
Some examples (str1, str2 -> n1,n2):
"abc", "abc" -> 3,0
"bca", "abc" -> 0,3
"aab", "abb" -> 2,0
"aab", "aba" -> 1,2
"abc", "aaa" -> 1,0
答案 0 :(得分:1)
据我了解,您有两个字符串,s1
和s2
,您可以从中获得两个字符串:
ss1 = s1[0,n]
ss2 = s2[0,n]
,其中
n = [s1.size, s2.size].min
并且您想知道ss2
的字符是否可以重新排列为ss1
。如果我的理解是正确的,那么当且仅当以下情况属实时才是真的:
ss1.chars.sort == ss2.chars.sort
示例:
s1 = "ebcda"
s2 = "adcbefr"
n = [s1.size, s2.size].min #=> 5
ss1 = s1[0,n] #=> "ebcda"
ss2 = s2[0,n] #=> "adcbe"
ss1.chars.sort == ss2.chars.sort #=> true
答案 1 :(得分:0)
我已经用PHP创建了脚本。以下是我的要求,该要求几乎与此线程相似。
n1:一个字符串中字母的数量,每个字母的值和 在另一个字符串中的字母位置。
n2:一个字符串中字母的数量,每个字母的值都匹配, 但不在其他字符串中的字母位置。
一些注意事项: *如果两个字符串被交换,输出应该是相同的 *字符串中的每个字母实例只能参加一场比赛。 *如果一个字母实例可以参与n1或n2,则应计入n1。 *这两个字符串的长度可以相同,也可以不同。
也用许多类似下面的单词进行了测试:
string_matcher('bca', 'abc');
string_matcher('aab', 'abb');
string_matcher('aab', 'aba');
string_matcher('abc', 'aaa');
string_matcher('ebcda', 'adcbefr');
string_matcher('prashant', 'gautam');
string_matcher('language', 'awesome');
string_matcher('masterpiece', 'effective');
string_matcher('Fabulous','regression');
string_matcher('regression','religion');
function string_matcher($s1, $s2)
{
$n1 = $n2 = 0;
$arrS1 = str_split($s1);
$arrS2 = str_split($s2);
$minLen = min(array(count($arrS1), count($arrS2)));
for ($i=0; $i<$minLen; $i++){
if($arrS1[$i] == $arrS2[$i]){
$n1++;
unset($arrS1[$i], $arrS2[$i]);
}
}
$arrS1 = array_values($arrS1);
$arrS2 = array_values($arrS2);
while(true){
if(count($arrS1) && count($arrS2)){
if(in_array($arrS1[0], $arrS2)){
$position = array_search($arrS1[0], $arrS2);
$n2++;
unset($arrS1[0], $arrS2[$position]);
} else{
unset($arrS1[0]);
}
$arrS1 = array_values(array_filter($arrS1));
$arrS2 = array_values(array_filter($arrS2));
} else{
break;
}
}
echo '<hr>“'.$s1.'”, “'.$s2.'” -> '.$n1.','.$n2;
}