c - 用 C 解决这个问题时的时间限制
问题描述
上 下
比比还想挑战乔乔和莉莉。她有一个长度为 N 的字符串 S。字符串可以包含大写和小写字符。然后她会从字符串的开头开始迭代,如果第K个字符是大写字符,那么她将改变它之后的所有字符,使得大写字符变为小写字符,小写字符变为大写字符。迭代结束后,她会问 Jojo 和 Lili 是什么字符串。
格式输入
1.输入的第一行将包含一个整数T,即测试用例的数量。
2.每个测试用例将包含一个字符串S和一个整数N作为它的长度。
格式输出
对于每个测试用例,打印“Case #X:”(X 以 1 开头)。然后在同一行上,在迭代后打印字符串。
约束
1 <= T <= 10
1 <= N <= 100000
该字符串将仅由大写和小写字符组成。
这是我的解决方案。但它不断得到TLE。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(){
int room,len;
scanf("%d",&room);
char words[100000];
for(int i = 0; i<room; i++){
scanf("%s %d",words,&len);
char next[100000];
int j = 0;
printf("Case #%d: ",i+1);
while(j<len){
int k = j+1;
if(isupper(words[j])){
while(k<len){
if(isupper(words[k])){
words[k] = tolower(words[k]);
}else{
words[k] = toupper(words[k]);
}
k++;
}
}
//printf("%c",words[j]);
j++;
}
printf("%s",words);
printf("\n");
}
return 0;
}
需要帮助以获得更好的解决方案。
我认为 TLE 来自嵌套循环,但如果没有嵌套循环,我无法弄清楚。
解决方案
在“新算法”部门 - 您已经按照说明实现了算法。但是,这意味着您要花费大量时间(我猜大部分时间)循环遍历字符串,更改字符的大小写,可能会多次。你实际上不需要这样做。保留您找到的大写字符数的计数器,最初设置为零。当你检查一个角色时,检查计数器。如果计数器是奇数(即if (counter & 1)...
),则反转您当前正在查看的字符的大小写(将大写变为小写,从小写变为大写)。完成后,测试您当前正在查看的字符是否为大写(可能刚刚更改为大写)。如果是这样,增加计数器。然后继续下一个字符。
这可以在原地和单程中完成,无需任何嵌套循环。
所以你在字符串上的循环看起来像
for (i = 0, counter = 0 ; i < strlen(string) ; ++i)
{
if (counter & 1) /* if counter is odd */
if (isupper(string[i])) /* if character [i] is upper case */
string[i] = tolower(string[i]); /* convert character [i] to lower case */
else
string[i] = toupper(string[i]); /* convert character [i] to upper case */
if(isupper(string[i])) /* if character [i] is now upper case */
counter += 1; /* increment the counter */
}
祝你好运。
推荐阅读
- sql - 如何透视表并用逗号分隔“聚合”字段?
- json - Zoopla API 返回
- flask - Flask SocketIO:WebSocket 握手期间出错
- unix - 为什么我的文本文件在 WSL Vim 上打开后在 macOS 上变得不可读?
- bash - 用 bash 计算表达式
- xamarin.forms - AzureKeyVault 集成 AzureFunction 和 xamarin 表单
- clojure - 通过键值交换地图查找中的嵌套特定项目,地图中的位置
- javascript - 没有未使用的变量
- java - 将 csv 数据加载到 Elasticsearch 失败,翻译问题
- python - 如何在python中修复“未定义序列”