问题如下:
通过分别用1,2,9和6替换单词CARE中的每个字母,我们形成一个平方数:1296 = 36 ^(2).值得注意的是,通过使用相同的数字替换,anagram,RACE,也形成一个平方数:9216 = 96 ^(2).我们将CARE(和RACE)称为方形字谜词对,并进一步指定不允许前导零,不同字母也不能与另一个字母具有相同的数字值.
使用words.txt(右击和'保存链接/目标为...'),一个包含近两千个常用英文单词的16K文本文件,找到所有方形字谜词对(一个回文词不被认为是一个自己的字谜).
这样一对中任何一个成员形成的最大平方数是多少?
注意:形成的所有字谜必须包含在给定的文本文件中.
我不明白CARE到1296的映射?这是如何运作的?或者是所有排列映射都要尝试,即所有字母都是1-9?
我知道以前曾经问过这个变种,但我无法理解以前的任何实现,因为大多数都涉及使用集合和issubset方法.
这是我想要做的:我在字典中有一组单词和可能的字母列表.我想找到是否可以通过重新排列列表中的字母来形成集合的成员.这是我目前的实施:
def solve(dictionary, letters):
for word in dictionary: #for each word in the dictionary
if len(word) > len(letters): # first optimization, doesn't check words that are larger than letter set
continue
else:
scrambledword = "".join([b for b in sorted(list(word))]) #sorts the letters in each word
if set(scrambledword).issubset(letters):
print word
def main():
dictionary = set([x.strip() for x in open("C:\\Python27\\dictionary.txt")])
letters = sorted(['v','r','o','o','m','a','b','c','d'])
solve(dictionary, letters)
main()
Run Code Online (Sandbox Code Playgroud)
这个实现的明显问题是会发现在"字母"中使用多个字母的单词.例如,尽管字母列表中只有一个"a"和"r"副本,但"纸板"这个词显示为有效单词.如何在列表中使用"issubset"方法?
有没有人知道改变现有NSString或NSMutableString字符顺序的现有方法?无论如何我都有一个解决方法,但如果有一个现有的方法,它会很棒.
例如,给定字符串@"HORSE",一个返回@"ORSEH",@"SORHE",@"ROHES"等的方法?
我完全是PHP的新手.今天我遇到了一个我不知道如何解决的问题,即使在搜索谷歌和挖掘SOF之后.这是Anagram算法.
所以基本上,我理解这里的问题:当用户输入一个字符串时,我将它拆分并与我的库(一个给定的数组)进行比较,然后我将必须通过2-3 -...等字符加入它再次进行比较,它正是我现在被困住的地方,我不知道如何加入数组的元素.
这是我正在实现的代码,也是一个示例字典.
我有一个自制的字典,在数组$ dict中包含这些元素.我有一个表单供用户输入字符串,输入的字符串将传递给下面的代码并声明为$ anagram.我必须将输入的字符串拆分为与我的字典进行比较.但是我不知道如何加入它们,比如将2个字母,3个字母......等等...比作字典.
<?php
$dict = array(
'abde',
'des',
'klajsd',
'ksj',
'hat',
'good',
'book',
'puzzle',
'local',
'php',
'e');
$anagram = $_POST['anagram'];
//change to lowercase
$anagram = strtolower($anagram);
//split the string
$test = str_split($anagram);
//compare with $dict for the first split without joining
for ($i=0; $i<strlen($anagram); $i++) {
if ($test[$i]==$dict[$i]) {
echo $test[$i]."<br />";
}
}
//problem: how to join elements of the array in the loops
//like user inputs "hellodes"
//after echo "e", how to join …
Run Code Online (Sandbox Code Playgroud) 给定一个长度不超过25个字符的输入字符串,由字符AZ组成,在输入字符串的所有可能字符串的按字母顺序排序的列表中输出其索引.输入字符串不区分大小写.输入字符可以重复.该应用程序必须在不到500毫秒的时间内完成并占用少于1GB的内存.
乍一看,没有任意精度数学库,这看起来是不可能的.最坏的情况输入是25个独特的字符,结果是25!可能的字谜.25!是数量级大于2 ^ 64.由于索引和字符串之间的关系不是直接的并且必须计算,因此无法简单地将字符串转换为数字.
这来自我前几天接受的采访挑战.我无法为他们提出解决方案,他们坚持认为确实有一个很好的解决方案......
我必须找到对于给定单词可能的回文数字.假设这个词是.aaabbbb
我的方法是
准备一个不包含的哈希映射.每封信出现的时间
对于我的例子,它将是
Run Code Online (Sandbox Code Playgroud)a--->3 b--->4
如果字符串的长度是偶数则没有.每个字母的出现应该是甚至形成给定单词的回文,否则回文字符的结果是0
如果字符串的长度是奇数,那么在最多一次出现的字母可以是奇数而其他字母应该是偶数.
上述两个步骤是为了找到给定单词可以形成回文的天气.
现在找不到回文字谜,我应该采用什么方法?
我尝试为字谜编写一个小代码,然后我写下了onw.
String s = "anagram";
String t = "nagara";
Map<Character,Integer> map1 = new HashMap<Character,Integer>();
Map<Character,Integer> map2 = new HashMap<Character,Integer>();
if (s.length() != t.length()) {
System.out.println("Not an anagram");
} else {
for (int i= 0;i<s.length();i++) {
char c = s.charAt(i);
char d = t.charAt(i);
if (map1.containsKey(c)) {
map1.put(c, map1.get(c)+1);
} else {
map1.put(c,1);
}
if (map2.containsKey(d)) {
map2.put(d, map2.get(d)+1);
} else {
map2.put(d,1);
}
}
for (Map.Entry<Character, Integer> entry : map1.entrySet()) {
if (!map2.containsKey(entry.getKey())) {
System.out.println("Not an anagram");
} else if …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在javascript中进行anagram检查.为简单起见,假设下面的函数只采用小写字符串而没有任何间距/数字/符号.为什么下面的代码不起作用?
var anagram = function(string1, string2) {
var string1array = string1.split('').sort();
var string2array = string2.split('').sort();
if (string1array == string2array) {
console.log("they're anagrams");
}
else {
console.log("they are not anagrams");
}
}
Run Code Online (Sandbox Code Playgroud) 刚刚完成了最近的作业,但我知道它可能更有效率.它从命令行读取两个单词,忽略空格和标点符号,并确定它们是否是字谜.我的内容如下; 据我所知,它功能齐全.
/**
* Find out if a string is an anagram of another string
*
*/
import java.util.Arrays;
public class Anagram
{
public static void main(String[] args)
{
if (args.length != 2)
System.out.println("You did not enter two words!");
else
printWords(args[0], args[1]);
}
// method to determine whether two strings have the same chars
public static boolean areAnagrams(String wordOne, String wordTwo)
{
// new strings for letters only
String ltrsOnlyOne = lettersOnly(wordOne);
String ltrsOnlyTwo = lettersOnly(wordTwo);
// convert strings to …
Run Code Online (Sandbox Code Playgroud) 我必须编写程序,该程序应该读取字谜文件并显示单词+他的字谜。Txt文件很大,使用扫描仪后,listOfWords大小为:25000。
输出示例:
word anagram1 anagram2 anagram3 ...
word2 anagram1 anagram2...
Run Code Online (Sandbox Code Playgroud)
我有代码,它可以工作,但速度很慢:
private static List<String> listOfWords = new ArrayList<String>();
private static List<ArrayList<String>> allAnagrams = new ArrayList<ArrayList<String>>();
public static void main(String[] args) throws Exception {
URL url = new URL("www.xxx.pl/textFile.txt");
Scanner scanner = new Scanner(url.openStream());
while (scanner.hasNext()) {
String nextToken = scanner.next();
listOfWords.add(nextToken);
}
scanner.close();
while (listOfWords.isEmpty() == false) {
ArrayList<String> anagramy = new ArrayList<String>();
String wzor = listOfWords.remove(0);
anagramy.add(wzor);
char[] ch = wzor.toCharArray();
Arrays.sort(ch);
for (int i = 0; i < …
Run Code Online (Sandbox Code Playgroud) anagram ×10
algorithm ×3
java ×3
math ×2
arrays ×1
java-8 ×1
java-stream ×1
javascript ×1
list ×1
membership ×1
nsstring ×1
objective-c ×1
palindrome ×1
php ×1
python ×1
random ×1
set ×1
sorting ×1
split ×1
string ×1