0
A
回答
1
我觉得你可以在O(n)
时间为此在的地方。迭代字符串,保留一个指向开始处理的单词。如果发现该单词的长度大于k
,则用该单词覆盖该字符串的开头。这里有一个C代码(它假设每个词在空间上都是分开的):
void modify(char *s, int k){
int n = strlen(s);
int j = 0, cnt = 0, r = 0, prev = -1;
s[n++] = ' '; // Setinel to avoid special case
for(int i=0; i<n; i++){
if(s[i] == ' '){
if (cnt > k){
if(r > 0) s[r++] = ' ';
while(j < i) s[r++] = s[j++];
}
cnt = 0;
}
else {
if (prev == ' ') j = i;
cnt++;
}
prev = s[i];
}
s[r] = '\0';
}
int main(){
char s[] = "my name is vikas";
modify(s, 2);
printf("%s\n", s);
}
1
遍历保持字符串中的当前位置和“当前字”,累加所有当前字长度> = K字符串的各个字符,从累积词语重新组装字符串?
该算法采用就地重写,最大限度地减少副本的元素之间的数字:
final int k = 2;
char[] test = " my name is el jenso ".toCharArray();
int l = test.length;
int pos = 0;
int cwPos = 0;
int copyPos = 0;
while (pos < l)
{
if (Character.isWhitespace(test[pos]))
{
int r = pos - cwPos;
if (r - 1 < k)
{
copyPos -= r;
cwPos = ++pos;
}
else
{
cwPos = ++pos;
test[copyPos++] = ' ';
}
}
else
{
test[copyPos++] = test[pos++];
}
}
System.out.println(new String(test, 0, copyPos));
0
类似的东西就足够了(时间复杂度为最佳,我猜):
input
.Split(' ')
.Where(s => s.Length > k)
.Aggregate(new StringBuilder(), (sb, s) => sb.Append(s))
.ToString()
什么关于空间复杂性?那么,这可以运行在O(k)(当然,我们不能计算输入和输出的大小),如果你想一想。它不会在.NET中,因为Split会生成实际的数组。但是你可以改用迭代器。如果你想象这个字符串只是迭代字符,它将变成O(1)算法。
0
split()
通过" "
,省略if length() <= 2
1
"a short sentence of words" split ' ' filter {_.length > 2} mkString " "
(斯卡拉)
相关问题
- 1. 如何裁剪一个字符串?
- 2. 在无符号字符处裁剪字符串
- 3. 裁剪选择字符串输出。
- 4. 剪裁字符串的帮助
- 5. 如何从字符串中选择和裁剪某些字符?
- 6. 修剪字符串与Dapper.NET
- 7. IIS Express中的ETX字符裁剪响应 - 666个字符
- 8. 获取字符串2个字符串
- 9. 保存含有<>字符与字符串的字符串
- 10. 在字符串中剪切字符串
- 11. 字符串修剪/子字符串C#
- 12. 试图修剪'字符串'字符串?
- 13. 比较2字典<字符串,字符串>实例
- 14. 字符串或characterAt UTF8字符串与2个字节的字符在JAVA
- 15. 用2个字符串替换2个字符串的棘手字符串
- 16. 修剪字符串
- 17. 修剪字符串
- 18. 修剪字符串
- 19. 修剪字符串
- 20. 从2个字符串中抽取字符串与Jquery
- 21. string1的哪个子字符串与字符串2匹配
- 22. 如何裁剪字符串中的一个div
- 23. 第二个句号后的裁剪字符串
- 24. DataTable to Dictionary <字符串,字典<字符串,字典<字符串,字符串>>>
- 25. 无法转换词典<字符串,字典<字符串,字符串>>到的IDictionary <字符串的IDictionary <字符串,字符串>>
- 26. 如何使用2个分隔符剪切字符串
- 27. 词典与字典<字符串,字符串>
- 28. 从字符串修剪字符
- 29. preg_replace剪辑字符串中的字符
- 30. 从字符串剪切零字符(字符串[: - 0]) - Python
最好的答案是语言相关的。这不是语言不可知的。 – marcog 2011-01-20 11:45:55
@Colin [请勿编辑问题以添加作业标签。如果有任何疑问,最好保留原样。相反,首先添加注释,要求提问者澄清情况。](http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) – marcog 2011-01-20 11:47:15