小太阳的博客

仰望星空,脚踏实地!


  • 首页

  • 归档

  • 有料

leedcode1

发表于 2018-04-13

从今天开始,博主要更新leedcode算法题啦!

编程环境:Java jdk为1.8

笔者提交题目的平台为leetcode,希望和大家一起进步啊!

问题描述:

Longest Substring Without Repeating Characters
problem:Given a string,find the longest substring without repeating charaters.

Examples:

input:”abcabcabcbb” substring:”abc” output:3

input:”bbbbb” subdtring:”b” output:1

input:”pwwkew” substring:”wke” or “kew” output:3

解决思路:

1、笔者考虑了一下,凡是下一个字符和当前子串有重复时,我们当前子串的长度计数停止。栗子:abcabcabcbb中我们遍历到第二个a时,由于它和我们当前最长子串有重复,当前子串停止增长,我们需要记下这个子串,然后从下标为3的a重新开始统计子串。

2、下面介绍一种最为简单的办法,直接上代码:

public static int lengthOfLongestSubstring(String s) {
    if(s.length()==0)
        return 0;
    int maxlength=1,pre=1;
    String substring,presubstring;
    String[] arrays = s.split("");//把字符串拆分成一个个字符
    presubstring=substring=arrays[0];
    for(int i=1;i<s.length();i++) {
        int temp = substring.indexOf(arrays[i]);//判断字符是否在子串中出现过了,笔者使用了Java内置的函数,大家也可以自己实现。
        if(temp==-1) {
            substring=substring+arrays[i];
            maxlength++;
        }
        else {
            if(maxlength>pre) {
                presubstring=substring;
                pre=maxlength;
            }
            i=i-(substring.length()-temp-1);
            substring=arrays[i];//退回到发现重复子串的地方
            maxlength=1;
        }
    }
    //System.out.println(presubstring);
    if(maxlength>pre)
        pre=maxlength;
    return pre;
}

提交运行,我们发现网站告诉提示,代码超时。是啊,以上代码没有任何巧妙之处,只是暴力遍历,话不多说,移步前往下面。

3、我们每次发现重复子串都要往前移动,细心的同志发现了在substring中的元素是不重复的,我们没必要每次退回再去重复判断。这个小问题修改之后,代码如下:

public static int lengthOfLongestSubstring(String s) {
    if(s.length()==0)
        return 0;
    int maxlength=1,pre=1;
    String substring,presubstring;
    String[] arrays = s.split("");//把字符串拆分成一个个字符
    presubstring=substring=arrays[0];
    for(int i=1;i<s.length();i++) {
        int temp = substring.indexOf(arrays[i]);//判断字符是否在子串中出现过了
        if(temp==-1) {
            substring=substring+arrays[i];
            maxlength++;
        }
        else {
            if(maxlength>pre) {
                presubstring=substring;
                pre=maxlength;
            }
            int b=i-(substring.length()-temp-1);
            substring=s.substring(b,i+1);//不用退回啦
            maxlength=substring.length();
        }
    }
    //System.out.println(presubstring);
    if(maxlength>pre)
        pre=maxlength;
    return pre;
}

这下再提交,可以发现我们的答案被Accepted啦!

3、再仔细观察,还有哪里可以改进呢。没错,就是大家想的那样,我们除了从头到尾遍历字符串之外,还要查找当前字符是否在子串中,如果我们可以做到查找是O(1)的,那么该算法的理论时间复杂度就可以达到O(n)啦。轻松一想,hash是一个不错的选择,拓展部分交给各位同志啦。

加一波友链,共同进步 https://blog.csdn.net/wonner_ 。

欢迎大家指点,联系笔者:18804656964@163.com,非常希望和各位一起共同进步。上述均属原创,欢迎转载,转载请注明哦。

C#系列(一)

发表于 2018-04-02

本文基础:C/C++以及QT
环境:vs2010
C#的变量,常量,运算符等基本知识与C/C++一样。下面我来介绍一些不一样之处。
一、 结构体
对,你没听错,C#的结构体可以有方法了。举个栗子,
struct Books
{
private string title;
private string author;
private string subject;
private int book_id;
public void getValues(string t, string a, string s, int id)
{
title = t;
author = a;
subject = s;
book_id =id;
}
public void display()
{
Console.WriteLine(“Title : {0}”, title);
Console.WriteLine(“Author : {0}”, author);
Console.WriteLine(“Subject : {0}”, subject);
Console.WriteLine(“Book_id :{0}”, book_id);
}

};
可以看到,结构体的成员变量也有了访问规则的限制(public,private,protected),并且结构体里面新增了方法,可以进行一些简单的操作。
总结一下结构有以下特点:结构课带有方法,字段,索引,属性,运算符方法和事件;结构可定义构造函数(这里的构造函数不能是默认构造函数),但不能定义析构函数;结构不能继承其他的结构;
注意啦,基础语法知识不在此过多叙述了。下面开始实战。
开始第一个C#程序之旅。

二、 一步步创建C#窗体程序
1、 文件-新建-项目-选择Windows窗体应用程序,然后修改项目名为hello,点击确定,就完成了项目的创建。

创建
2、 创建完成之后会出现一个窗体。
窗体
3、 拖动label控件到窗体中,更改其text属性为输入。再拖动一个label控件,同样更改text为输出。拖动两个textbox控件,分别更改Name属性为input和output。最后再添加一个button控件,text改为确认。
成品
4、 接下来,我们给按钮添加方法,双击按钮,系统会自动生成一个类似qt中槽函数的函数。我们把按下按钮想要进行的操作编写在里面。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    private void button1_Click(object sender, EventArgs e)
    {
        String s = input.Text;
        s = "hello " + s;
        output.AppendText(s);
    }


}

5、 点击运行,得到第一个C#窗体程序。
结果
更为复杂的窗体程序下次再叙。

Hello World

发表于 2018-04-02

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

燕钰

一直努力的小白

3 日志
© 2018 燕钰
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4