找出字符串中最长不重复的子串

这题 是群里一个人发出来的  我就试着去做了下 他们说 这题蛮水的 我擦了-.-

花了很长时间 在原有的代码上 修改了很多 自己测了很多组数据 觉得应该对了

我的方法应该是 hash的思想 但这边我是直接用了map去存 也没差

假如有个字符串是abbcda 那么我们应该在遍历到第二个b的时候 计算出此时的 len 并且将在b之前的字符 重置为 未访问

我的思想就是这样的 - 觉得 看代码可以读懂.

 1 #include <iostream>
 2 #include <cstring>
 3 #include <map>
 4 using namespace std;
 5
 6 map<char,int>mp;
 7 int main()
 8 {
 9     int x , y , st , end , ans , sum , len , mmin , temp;
10     char str[110];
11     while( cin >> (str+1) )
12     {
13         mmin = st = end = ans = 1;
14         len = strlen(str+1);
15         mp.clear();
16         for( int i = 1 ; i<=len ; i++ )
17         {
18             if( !mp[ str[i] ] )
19             {
20                 mp[ str[i] ] = i;
21                 if( i==len )
22                 {
23                     sum = i+1-st;
24                     if( ans<sum )
25                     {
26                         ans = sum;
27                         x = st;
28                         y = i+1;
29                     }
30                 }
31             }
32             else
33             {
34                 sum = i - st;
35                 temp = mp[ str[i] ];
36                 for( int j = mmin ; j<=mp[ str[i] ] ; j++ )
37                 {
38                     mp[ str[j] ] = 0;
39                 }
40                 mmin = temp + 1;
41                 mp[ str[i] ] = i;
42                 if( ans<sum )
43                 {
44                     ans = sum;
45                     x = st;
46                     y = i ;
47                 }
48                 st = temp + 1;
49             }
50         }
51         cout << x << " " << y << endl;
52         cout << ans << endl;
53     }
54     return 0;
55 }

每天 群里会有很多有意思的问题 我会尽量将我会的问题 贴出来.

如果 代码有错误 请告诉我 谢谢

时间: 2024-10-29 05:03:18

找出字符串中最长不重复的子串的相关文章

找出字符串中最长不重复子串

public class AE { public static void main(String[] args) { //String s = "abacdecfgab"; String s = "abacdbe"; System.out.println(noDuplicate(s)); } public static String noDuplicate(String str) { String sub = ""; String result

找出字符串中第一个不重复的字符(JavaScript实现)

如题~ 此算法仅供参考,小菜基本不懂高深的算法,只能用最朴实的思想去表达. 1 //找出字符串中第一个不重复的字符 2 // firstUniqueChar("vdctdvc"); --> t 3 function firstUniqueChar(str){ 4 var str = str || "", 5 i = 0, 6 k = "", 7 _char = "", 8 charMap = {}, 9 result =

找出字符串的最长不重复字串

这是我遇到的一道校招题目: 给定一字符串只包含数字,请写一个算法,找出该字符串中的最长不重复子串(不重复是指子串中每一元素不同于子串中其他元素) 如: "120135435"最长不重复子串为 "201354" 要求用java或者c来写,我用了java. /** * 思想: *      从头开始截取字符串,只要后一个元素不在截取的字符串里,就更新截取,多截取一个元素. *       如果发现后一个元素出现在字符串里, 将最后截取的字符串存为临时结果,开始位置后移一

找出字符串的最长不重复子串,输出最大的子字符串

比如: ababcdebc,那他最大的子字符串就是:abcde using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication4 {     class Program {         static void Main(string[] args) {         

c语言代码编程题汇总:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值

找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 程序代码如下: 1 /* 2 2017年3月8日08:39:16 3 功能:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 4 */ 5 6 #include"stdio.h" 7 int main (void) 8 { 9 int i = 0, j = 0; 10 char a[100]; 11 char ch; 12 int num = 0; 13 14 printf ("please inp

找出字符串中出现次数最多的字符,和最大次数

/*找出字符串中出现次数最多的字符,和最大次数*/ function countMax(str){ var max = 0; // 记录出现的最大次数 var maxChar = ""; // 记录出现最多次数的字符 var counts = new Array(127); // 记录中间计算结果 for(var i = 0; i < counts.length; i++){ counts[i] = 0; } for(var i = 0; i < str.length; i

华为OJ:找出字符串中第一个只出现一次的字符

可以稍微让代码写的好看,不用直接写双循环的话,就可以写成函数的调用,重用性也很高. import java.util.Scanner; public class findOnlyOnceChar { public static boolean FindChar(String pInputString, char pChar){ int count=0; for(int i=0;i<pInputString.length();i++){ if(pInputString.charAt(i)==pCh

找出字符串中第一个出现次数最多的字符

找出字符串中第一个出现次数最多的字符 详细描述: 接口说明 原型: bool FindChar(char* pInputString, char* pChar); 输入参数: char* pInputString:字符串 输出参数(指针指向的内存区域保证有效): char* pChar:出现次数最多的字符 返回值: false 异常失败 true  输出成功 #include <iostream> #include <string.h> using namespace std; b

[Python3 练习] 010 找出字符串中特定的字符

题目:找出藏在字符串中的"密码" (1) 描述 1) 题源1 鱼 C 论坛中"小甲鱼"老师出的题 链接地址:第020讲:函数:内嵌函数和闭包 | 课后测试题及答案 2) 题源2 这几日挺巧的 在鱼 C 论坛上找 Python 习题,点开第 20 节,看到两道操作题 又想起一个网站 Python Challenge ,久闻其名,未曾拜访,遂一探究竟 原来小甲鱼老师第 20 节的两道操作题改编自 Python Challenge 的 level2 与 level 3 2