如何找出01串中最长的子串?
时间: 2023-05-20 07:05:21 浏览: 72
可以使用动态规划来解决这个问题。定义一个数组 dp,其中 dp[i] 表示以第 i 个字符结尾的最长子串的长度。初始时,dp[0] = 1。然后从第二个字符开始遍历,如果当前字符与前一个字符相同,则 dp[i] = dp[i-1] + 1,否则 dp[i] = 1。最后遍历一遍 dp 数组,找出其中的最大值即可。
以下是示例代码:
```python
def find_longest_substring(s):
n = len(s)
dp = [1] * n
for i in range(1, n):
if s[i] == s[i-1]:
dp[i] = dp[i-1] + 1
return max(dp)
s = "110001111000011111"
print(find_longest_substring(s)) # 输出 5
```
注意:这个算法的时间复杂度是 O(n),其中 n 是字符串的长度。
相关问题
java中如何找出01串中最长的子串?
可以使用动态规划来解决这个问题,具体步骤如下:
1. 定义状态:用 dp[i] 表示以第 i 个字符结尾的最长的 01 子串的长度。
2. 状态转移方程:如果第 i 个字符是 0,那么 dp[i] = dp[i-1] + 1;如果第 i 个字符是 1,那么 dp[i] = 0。
3. 初始状态:dp[0] = 0。
4. 最终结果:遍历 dp 数组,找到最大值即可。
以下是 Java 代码实现:
public int findMaxSubString(String s) {
int[] dp = new int[s.length()];
dp[0] = 0;
int max = 0;
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) == '0') {
dp[i] = dp[i-1] + 1;
} else {
dp[i] = 0;
}
max = Math.max(max, dp[i]);
}
return max;
}
找出字符串中无重复最长子串-java实现
可以使用滑动窗口的思想来解决这个问题,具体实现如下:
```java
public static String longestSubstring(String s) {
int n = s.length();
Set<Character> set = new HashSet<>();
String longest = "";
int left = 0, right = 0;
while (right < n) {
char c = s.charAt(right);
if (!set.contains(c)) {
set.add(c);
right++;
if (set.size() > longest.length()) {
longest = s.substring(left, right);
}
} else {
set.remove(s.charAt(left));
left++;
}
}
return longest;
}
```
该方法的时间复杂度为O(n),其中n为字符串s的长度。
阅读全文