- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试用 Java 编写这样的算法。我正在测试字符串输入“abaab”。假设字符串输入为小写是安全的。
我无法检查我的算法哪里出错了(它只为这个输入输出“a a”而不是“ab”和“abaab”。有什么想法吗?
static void SmallestAndLargestSubstring(String input) {
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
char[] cons = { 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x',
'y', 'z' };
char[] charArray = input.toLowerCase().toCharArray();
int startIndex = 0;
int shortEndIndex = 0;
int longEndIndex = 0;
int large = longEndIndex - startIndex;
int small = shortEndIndex - startIndex;
ArrayList<Integer> start = new ArrayList<Integer>();
ArrayList<Integer> end = new ArrayList<Integer>();
outerloop: for (int i = 0; i < charArray.length; i++) {
for (int z = 0; z < vowels.length; z++) {
if (charArray[i] == vowels[z]) {
startIndex = i;
start.add(startIndex);
if (longEndIndex - startIndex > large) {
large = longEndIndex - startIndex;
}
if(longEndIndex - startIndex <= large){
shortEndIndex=start.get(start.size()-1);
}
if (shortEndIndex - startIndex < small) {
small = shortEndIndex - startIndex;
}
if(shortEndIndex - startIndex >=small){
shortEndIndex=start.get(start.size()-1);
}
continue outerloop;
}
}
for (int j = 0; j < cons.length; j++) {
if (charArray[i] == cons[j]) {
longEndIndex = i;
shortEndIndex = i;
end.add(longEndIndex);
if (longEndIndex - startIndex > large) {
large = longEndIndex - startIndex;
}if(longEndIndex - startIndex <= large){
longEndIndex=end.get(end.size()-1);
}
if (shortEndIndex - startIndex < small) {
small = shortEndIndex - startIndex;
}
if(shortEndIndex - startIndex >=small) {
shortEndIndex=end.get(end.size()-1);
}
continue outerloop;
}
}
}
System.out.println(input.substring(startIndex, shortEndIndex));
System.out.println(input.substring(startIndex, longEndIndex));
}
最佳答案
我在寻找同样的问题时偶然发现了这个问题。
THE CURRENTLY ACCEPTED ANSWER IS WRONG.
对于字符串uauubbiox
,接受答案中的程序输出:
ub
uauubbiox
这是错误的(正确答案是 auub
和 uubbiox
。)即使对于 OP 问题中的情况,该程序也给出了错误答案(abaab
而不是 baab
)。
解决这个问题的正确方法是使用 suffix arrays .这是一个伪代码,我相信它会为这个问题产生正确的输出:
given string s as input
sa = suffix_array(s)
savf = the first string in sa which starts with a vowel
smallest substring = savf.substring(0, index of first consonant)
savl = the last string in sa which starts with a vowel
smallest substring = savf.substring(0, index of lastconsonant)
让我们试试这个测试字符串。测试字符串的后缀数组为:
0 auubbiox
1 bbiox
2 biox
3 iox
4 ox
5 uauubbiox
6 ubbiox
7 uubbiox
以元音字母开头的最小字典字符串是:
auubbiox
我们只需要找到这个字符串中以辅音结尾的最小前缀。那将是上述字符串位置 3 处的 b
。因此,以元音字母开头辅音字母结尾的字典序最小的字符串是:
auub
对于另一个字符串,查看后缀数组中以元音字母开头的最大字符串。这是索引 7 处的字符串:
uubbiox
因为我们想要尽可能大的字符串,所以我们应该选择尽可能长的以辅音结尾的前缀。在这种情况下,这将是上面的整个字符串。因此,字典序上以元音字母开头并以辅音字母结尾的最大字符串是:
uubbiox
计算字符串的后缀数组可以在 O(n) 中完成。维基百科文章讨论了构建它的一些方法。 Internet 上还有一些聪明的技术,可以使创建一个相对容易编码和实现的技术。我喜欢this one它为后缀数组提供了一种非常直接且易于理解的技术,具有可接受的(对于大多数情况)时间复杂度 O(nlog^2(n))
关于java - 吐出以元音开头并以辅音结尾的字符串的最小和最大子字符串的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35749994/
我试图在 haskell 上创建一个函数,我知道该函数的定义如下: justWithA : [Char] -> Bool justWithA [] = True justWithA (x:xs) |
我试图在 haskell 上创建一个函数,我知道该函数的定义如下: justWithA : [Char] -> Bool justWithA [] = True justWithA (x:xs) |
我正在尝试计算字符串中元音的总数。我正在使用 strlen 来获取字符串的总长度,但是当我尝试按每个字母对字符串进行计数时,它说 C++ 禁止比较。所以我假设我的 if 语句有问题。 #include
Task You are given a string . It consists of alphanumeric characters, spaces and symbols(+,-). Your
我刚刚开始用 C 语言编程,我必须创建一个程序来计算字符串有多少个元音。到目前为止我有这个: int a; int len = strlen(text)-1 for(a=0;a==len;++a){
尝试学习 Python 中的正则表达式以查找具有连续元音-辅音或辅音-元音组合的单词。我将如何在正则表达式中执行此操作?如果无法在 Regex 中完成,是否有一种在 Python 中执行此操作的有效方
我想输入 dagger-alif、dagger-waw 和 dagger-ya(也称为微型 alif、微型哇和微型 ya)作为 alif-wasla 使用 PC 阿拉伯语键盘。这些标记被使用帮助读者发
我正在尝试创建一个将文件上传到 FTP 服务器的批处理文件。除了一个特定文件夹的名称中包含突变/元音外,一切正常(无法更改。也就是文件夹名称中包含 ö。)。 我的问题是:有哪些选择可以实现这一目标?
我是一名优秀的程序员,十分优秀!