我确信这已经被问到并得到了回答,但老实说,在搜索了一下并阅读Regex Tutorial之后,我找不到我的答案.我要做的是匹配一个字符串,其长度与另一个字符串相同.例如,字符串"abcde"将匹配"edcba"但不匹配"abcdf"或"aabbc"或"abc".
这是我最接近的测试代码,它使用了一个字符类,但是我无法弄清楚的是如何在匹配开始时让regex基本上遍历类中的每个字符串:
$string = 'abcde';
$array = array('edcba','eeeee','fghij','fedcba','qqq','cbaed','cba');
foreach ($array as $match)
{
if (preg_match("/[$string]/i",$match))
echo "TRUE -> $match";
else
echo "FALSE -> $match";
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
TRUE -> edcba
TRUE -> eeeee
FALSE -> fghij
TRUE -> fedcba
FALSE -> qqq
TRUE -> cbaed
TRUE -> cba
Run Code Online (Sandbox Code Playgroud)
当我真正想要的是:
TRUE -> edcba
FALSE -> eeeee
FALSE -> fghij
FALSE -> fedcba
FALSE -> qqq
TRUE -> cbaed
FALSE …
Run Code Online (Sandbox Code Playgroud) 我已经解决了一个问题,要求你编写一个方法来确定所提供的数组中的字是字谜,并将字谜分组到输出中的子数组中.
我已经使用看似典型的方式来解决它,通过对单词进行排序并将它们分组为基于排序字符的哈希.
当我最初开始寻找一种方法时,我注意到String#sum
存在将每个角色的序数加在一起.
我想尝试一些方法来确定一个基于使用的字谜sum
.例如,"汽车"和"疤痕"是字谜,它们sum
是425.
给定%w[cars scar for four creams scream racs]
输出的预期输出(我已经使用哈希解决方案得到)是:[[cars, scar, racs],[for],[four],[creams,scream]]
.
看起来好像做了这样的事情:
input.each_with_object(Hash.new []) do |word, hash|
hash[word.sum] += [word]
end
Run Code Online (Sandbox Code Playgroud)
是一种方法,它给你一个哈希,其中键"425"的值是['cars','racs','scar'].我认为我缺少的是将其转换为预期的输出格式.
在很多帮助下,我开发了一种制作字谜的方法,然后将它们添加到一个ArrayList
.
public void f(String s, String anagram, ArrayList<String> array)
{
if(s.length() == 0)
{
array.add(anagram);
return;
}
for(int i = 0 ; i < s.length() ; i++)
{
char l = s.charAt(i);
anagram = anagram + l;
s = s.substring(0, i) + s.substring(i+l, s.length());
f(s,anagram,array);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试使用此函数ArrayList
在循环中将s添加String
到一个ArrayList
到另一个时,我得到一个错误,说我不能使用void,并且该方法f()
是无效的.
List<String> Lists = new ArrayList<String>(); //makes new array list
for(String List : words)
{ //takes values from old array list
List.trim();
Lists.add(f(List,"",new …
Run Code Online (Sandbox Code Playgroud) 使用PHP写一个anagram函数?它应该处理不同的短语并返回布尔结果.
用法:
$pharse1 = 'ball';
$pharse2 = 'lbal';
if(is_anagram($pharse1,$pharse2)){
echo $pharse1 .' & '. $pharse2 . ' are anagram';
}else{
echo $pharse1 .' & '. $pharse2 . ' not anagram';
}
Run Code Online (Sandbox Code Playgroud) 我确实有一个问题,我正在尝试使用最有效的方法来解决它.
"给定两个字符串,找出两个字符串是否相互排列."
我知道直截了当的方法(即排序两个字符串)等.
我想看看我的方法是否适用于所有情况,我不确定,所以我需要你的意见和你的意见.
def CheckPermutaionsBySumUp(firstString, secondString):
if (len(firstString) != len(secondString)):
return False
firstStringCount = 0
secondStringCount = 0
for char in firstString:
firstStringCount += ord(char)
for char in secondString:
secondStringCount += ord(char)
if firstStringCount == secondStringCount:
return True
return False
Run Code Online (Sandbox Code Playgroud)
所以我的方法是,我确实有一个有用的约束,并且如果两个字符串的长度不同,那么这两个字符串不是彼此的排列.
然后,知道每个字符都有唯一的数字表示,如果我使用ord
函数总结每个字符串的每个字母的数量,我可以比较两个总和并找出这两个字符串是否是排列.在我看来,这个解决方案不仅仅是O(n),而且比使用数组和数据结构更节省空间.
我唯一担心的是,有两个字符串,长度相同,字符不同,有相同的总和吗?
给出两个列表A和B,B是A的字谜.B是A的字谜A是通过随机化A中元素的顺序来制作的.我们想要找到从A到B的索引映射P. P [i] = j表示A中的第i个元素出现在索引j处的B中.这些列表A和B可能包含重复项.
例如,给定
A = [12,28,46,32,50] B = [50,12,32,46,28]我们应该返回[1,4,3,2,0]
我的解决方案是O(n ^ 2)
public int[] anagramMappings(int[] A, int[] B) {
int[] result = new int[100];
int count = 0;
for (int i = 0; i < A.length; i++) {
for (int j = 0; j < B.length; j++) {
if (A[i] == B[j]) {
result[i] = j;
count++;
break;
}
}
}
int[] tempArray = new int[count];
for (int i = 0; i < count; i++) {
tempArray[i] …
Run Code Online (Sandbox Code Playgroud) 这是我的代码,两个字符串是否是字谜
static boolean isAnagram(String a, String b) {
if (a.length() != b.length()) return false;
a = a.toLowerCase();
b = b.toLowerCase();
int m1=0;
for(int i=0;i<a.length();i++){
m1 += (int)a.charAt(i);
m1 -= (int)b.charAt(i);
}
return m1==0;
}
Run Code Online (Sandbox Code Playgroud)
我的代码在两个测试用例中失败了
String a="xyzw";
和String b="xyxy";
String a="bbcc";
和String b="dabc";
谁能帮助我通过上述两个案件?
我正在尝试构建一个程序,以查找单词的所有字谜。这将采用“ 123”并将其变成“ 132”,“ 213”,“ 231”,“ 312”,“ 321”(不相关的顺序)。我已经看过如何获取字符串的所有字谜的文章,但我希望使用普通循环而不是函数递归来完成。到目前为止,我的字谜功能是这样的:
void inline decodeAnagram(string anagram) {
srand(time(0)); // Get truly random numbers
while (amount != possibilities) {
bool failedCheck = false;
// Create array from letters
char splitAnagram[1024];
strcpy_s(splitAnagram, anagram.c_str());
// Main loop
for (int i = anagram.length() - 1; i > 0; i--) {
int index = rand() % i + 1;
char letter = splitAnagram[index];
splitAnagram[index] = splitAnagram[i];
splitAnagram[i] = letter;
}
// Loop to get valid array parts back …
Run Code Online (Sandbox Code Playgroud) 我想.txt
使用 Java Stream在文件中查找字谜。这是我所拥有的:
try (InputStream is = new URL("http://wiki.puzzlers.org/pub/wordlists/unixdict.txt").openConnection().getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
Stream<String> stream = reader.lines()) {
Run Code Online (Sandbox Code Playgroud)
以及字谜的方法:
public boolean isAnagram(String firstWord, String secondWord) {
char[] word1 = firstWord.replaceAll("[\\s]", "").toCharArray();
char[] word2 = secondWord.replaceAll("[\\s]", "").toCharArray();
Arrays.sort(word1);
Arrays.sort(word2);
return Arrays.equals(word1, word2);
}
Run Code Online (Sandbox Code Playgroud)
如何使用 Java 8 Stream 检查 unixdict.txt 中的单词是否是字谜?有没有办法将一个词与流中的所有词进行比较?
我写了 python 代码来检查需要从两个字符串中删除多少个字符才能使它们成为彼此的字谜。
这是问题陈述“给定两个字符串,并且 ,它们的长度可能相同,也可能不同,请确定制作和字谜所需的最少字符删除次数。可以从任何一个字符串中删除任何字符”
def makeAnagram(a, b):
# Write your code here
ac=0 # tocount the no of occurences of chracter in a
bc=0 # tocount the no of occurences of chracter in b
p=False #used to store result of whether an element is in that string
c=0 #count of characters to be deleted to make these two strings anagrams
t=[] # list of previously checked chracters
for x in a:
if x in t == True:
continue
ac=a.count(x) …
Run Code Online (Sandbox Code Playgroud)