• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 算法优化问题

算法优化问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了遗传算法优化问题,编程中的优化算法问题,遗传算法求解优化问题,最优化问题算法,遗传算法解决优化问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:算法优化问题
描述:

代码优化问题。给定一个字符串,找到最长的子串的长度不重复字符。例如字符串是"abcabc"那么应该返回3,如果是"bbbb"应该返回1
跑的时候总说时间过长

public class Solution {
    public int LengthOfLongestSubstring(string s) {
        int n = 0;
            if (s == "")
            {
                return n;
            }
            else
            {
                char[] chr = s.ToCharArray();
                for (int i = 0; i < chr.Length; i++)
                {
                    for (int j = i + 1; j < chr.Length; j++)
                    {
                        if (chr[i] == chr[j])
                        {
                            n = j;
                        }
                    }
                }
            }
            return n;
    }
}

解决方案1:

O(N)可以解决这个问题。

假设last[c]表示字符c上次出现的位置,
dp[i]表示以s[i]结尾的不重复字符串的最大长度。

对于dp[i]的计算,有两个限制,一是它最左边至多延伸到last[s[i]]的位置,
二是它最多延伸到dp[i - 1]所能延伸到的位置,两个候选解选择最短的那个就可以了。

时间复杂度O(N),下面是c++的实现,跟c#大同小异。

如果想输出那个子串,根据最大长度和取最优解的位置就能够恢复出来。

#include <bits/stdc++.h>
using namespace std;
int longest(string s) {
    if (s.size() <= 1) {
        return s.size();
    }
    vector<int> last(26, -1);
    vector<int> dp(s.size(), 1);
    int res = 1;
    last[s[0] - 'a'] = 0;
    for (int i = 1; i < (int)s.size(); ++i) {
        dp[i] = min(dp[i - 1] + 1, i - last[s[i] - 'a']);
        last[s[i] - 'a'] = i;
        res = max(res, dp[i]);
    }
    return res;
}
int main() {
    // 3
    printf("%d\n", longest("abcabc"));
    // 1
    printf("%d\n", longest("bbb"));
    return 0;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 算法优化问题

相关文章

  • 2017-06-07 redis主从配置目的是什么
  • 2017-06-07 RichfacesTreeBinding不能正常展开
  • 2017-06-07 mac外接显示器品种,大小推荐,写代码用
  • 2017-06-07 python爬虫python怎么获取网址
  • 2017-06-07 Python3类内部的函数调用总是报错
  • 2017-06-07 请问django和flask在pythonweb开发中哪个用的多?
  • 2017-06-07 这些年味儿你找到了么?
  • 2017-06-07 js数组排序
  • 2017-06-07 新手问题,请指教
  • 2017-06-07 求一个剔除html标签(除了a和img)的正则语句

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 现有一个mn的矩阵,矩阵外围一周的点的值是已知的,矩阵当中每个点的值都是上下左右四个点的平均值,如何求每个点的值?
    • rediskeys和expires近乎相同,怎么处理?
    • 七牛有获取某个空间下的所有文件名称列表的RESTAPI吗?
    • 七牛传图,为何有些图片我反复上传都不会错,有些图片就一直返回614资源已存在?
    • JBoss服务器运行不了有crimsonjar的工程?????????????????????????
    • macbook下laravel目录全部加了锁,怎么解决?
    • (shell)说说你觉得最狂霸酷炫屌炸天的命令
    • Andorid直接上传图片至七牛,token是每个Android客户端都分配吗?
    • 关于程序结构,goto等
    • (python)使用jsonloads,key不带引号,且value中可能含有“:”,如何最好地处理?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有