java - 可以做些什么来优化给定的代码
问题描述
给定代码的时间限制必须小于 1.824 秒。低于给定的代码超出了限制。我可以添加或替换什么,以便代码得到优化并在时间限制内运行。以下代码通过从字符串中删除“空格”和特殊字符来检查给定的字符串是否为 pallindrome。删除特殊字符后,字符串必须只包含字母。 示例: 输入: 2 I am :IronnorI Ma, i Ab?/Ba 输出: YES YES
代码:
public static void main (String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int T=Integer.parseInt(br.readLine());
while(T-->0)
{
String frog=br.readLine().replaceAll("\\s+","").replaceAll("[^\\w]","");
String news="";
char ch;
for(int i=0;i<frog.length();i++)
{
ch=frog.charAt(i);
news=ch+news;
}
if(news.equalsIgnoreCase(frog))
System.out.println("YES");
else
System.out.println("NO");
}
}
}
解决方案
这似乎是一个家庭作业,所以我不会为您提供代码,我只会指导您如何改进您的方法。
您的方法是相当线性的,您反转字符串,然后将反转与原始字符串进行比较。虽然这是一种正确的做法,但您会进行太多操作。
假设字符串的长度为 N,另一种方法是简单地循环 N/2 次,每次将第 i 个字符与第 N 个字符进行比较。如果任何字符不匹配,则打印 No 并中断,否则继续比较。如果所有字符都匹配,则打印 yes。
Mead 的解决方案实际上与您的解决方案相同,尽管它减少了初始过滤操作。
推荐阅读
- groovy - 将目录中的项目列表保存到集合中
- r - R中的内存分配:写入数组切片复制整个数组
- xamarin - 命令绑定在项目模板中不起作用
- vscode-extensions - 如果扩展的源代码位于私有 Github 存储库中,我可以将 VS Code 扩展发布到 VS Code Marketplace 吗?
- amazon-web-services - aws cli - 将现有安全组交换为不同的安全组
- mysql - AWS RDS 减少了 Lambda 的连接时间
- java - redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Broken pipe (Write failed)
- java - FloatingActionButton 不浮动在 Android Studio 的右下角?
- c# - C# - 是否可以通过 REST API 从 Confluence 页面获取 HTML 代码?
- ionic-framework - Ionic 5,SMS Retriever,StartWatching() 不工作