- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个算法可以在一组八个字母的单词中找到字谜。它实际上是将较长单词中的字母按字母顺序排列,对较短的单词一个接一个地执行相同的操作,然后查看它们是否存在于较长的单词中,如下所示:
塔 = eortw
两个= otw
rot = ort
这里的问题是,如果我在 eortw
(或 rot in tower)中寻找 ort
,它会找到它,没问题。在塔内发现腐烂物。但是,otw
不在 eortw
中(或塔中的两个),因为中间有 R。因此,它不认为在塔中发现了两个。
有没有更好的方法可以做到这一点?我试图在 Objective-C 中做到这一点,八个字母的单词和常规单词都存储在 NSDictionaries
中(以其正常和按字母顺序排列的形式)。
我看过其他各种帖子。 StackOverflow 上的字谜,但似乎没有一个解决这个特定问题。
这是我目前所拥有的:
- (BOOL) doesEightLetterWord: (NSString* )haystack containWord: (NSString *)needle {
for (int i = 0; i < [needle length] + 1; i++) {
if (!needle) {
NSLog(@"DONE!");
}
NSString *currentCharacter = [needle substringWithRange:NSMakeRange(i, 1)];
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString: currentCharacter];
NSLog(@"Current character is %@", currentCharacter);
if ([haystack rangeOfCharacterFromSet:set].location == NSNotFound) {
NSLog(@"The letter %@ isn't found in the word %@", currentCharacter, haystack);
return FALSE;
} else {
NSLog(@"The letter %@ is found in the word %@", currentCharacter, haystack);
int currentLocation = [haystack rangeOfCharacterFromSet: set].location;
currentLocation++;
NSString *newHaystack = [haystack substringFromIndex: currentLocation];
NSString *newNeedle = [needle substringFromIndex: i + 1];
NSLog(@"newHaystack is %@", newHaystack);
NSLog(@"newNeedle is %@", newNeedle);
}
}
}
最佳答案
如果您只使用部分字母,则它不是真正的变位词。
在您的情况下,一个好的算法是获取排序后的字符串并逐个字母地比较它们,跳过较长单词中的不匹配。如果您到达较短单词的末尾,那么您就有了匹配项:
char *p1 = shorter_word;
char *p2 = longer_word;
int match = TRUE;
for (;*p1; p1++) {
while (*p2 && (*p2 != *p1)) {
p2++;
}
if (!*p2) {
/* Letters of shorter word are not contained in longer word */
match = FALSE;
}
}
关于objective-c - 查找字谜Objective-C的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13380359/
我的程序运行良好,这只是我需要的一个小建议;首先这是我的代码,用于检查两个单词是否是字谜;效果很好; #include int anagram_check(char [], char []); in
面试问题给定两个输入字符串,您只能交换字符串中的两个连续元素。您必须展示将一个字符串转换为另一个字符串的所有步骤(两个字符串将是彼此的字谜)。例如。口香糖到马克杯 古姆百货公司通用汽车大学微量气体发生
我正在尝试学习 Python。考虑这个简单的 C 语言变位词检查器: bool are_anagrams(const char* str1, const char* str2) { int str
(下面关于我的问题的代码) 根据 this stack overflow question我使用 Pegolon 的方法来生成 NSString 中一组字符的所有可能排列。但是,我现在试图让它不仅生成
testing if strings are anagrams有很多种方式.但是,我想知道是否有一种方法可以只对每个单词进行一次迭代?如果不是,在 Python 中最有效的方法是什么? 我们可以遍历第
我是一名优秀的程序员,十分优秀!