java - 这个重复子串模式代码的运行时和空间复杂度是多少?(代码是用Java编写的)
问题描述
我为 LeetCode #459 问题编写了这个解决方案。https://leetcode.com/problems/repeated-substring-pattern/ 我想知道这个解决方案的运行时间和空间复杂度。我假设 O(logN N) 的运行时复杂度,其中 N 是字符串的长度。我对吗?
public boolean repeatedSubstringPattern(String s) {
if (s == null || s.isEmpty()) return true;
int l = s.length();
for (int i = l / 2; i > 0; --i) {
if (l % i == 0 && isThisSubString(s, s.substring(0, i), l / i)) {
return true;
}
}
return false;
}
private boolean isThisSubString(String s, String subString, int m) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < m; ++i) {
sb.append(subString);
}
return s.equals(sb.toString());
}
}
解决方案
在最坏的情况下,当 i 为 1 时,m 等于 5。isThisSubString 方法将遍历整个字符串。所以在最坏的情况下渐近,它是 O(n^2)。
推荐阅读
- r - 自动将一个表分成几个表,应用“过滤器”
- kubernetes - Docker 版本警告后,Kubernetes 加入节点预检挂起
- interface - 解决方案检查器在统一接口中的 window.top.close() 问题
- sql - 在我的情况下,如何使用 SQL 连接两列?
- mysql - 当我的应用程序扩展到多台服务器时,mysql编写syn解决方案
- python - form.save 不会保存数据并且不会将行添加到数据库中
- c++ - 在 OpenGL/GLFW 中管理默认着色器
- c# - Listview 滚动结束事件
- jquery - 在边界上放置可排序的问题
- rabbitmq - 如何定义绑定到来自不同连接的独占自动删除队列?