leetcode--3,Longest Substring Without Repeating Characters &&53. Maximum Subarray&&String.valueOf()

3,Longest Substring Without Repeating Characters

题目:Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring"pwke" is a subsequence and not a substring.

分析:

给定一个字符串,比较连续不重复的字串,返回最长字串的长度。

方法一:将字符串遍历,从第一个字符开始,然后从第二个字符开始........找到每一个不重复字串,放到一个stringBuffer数组(StringBuffer比String快,本题使用Sring会超时,StringBuffer刚好不超时),然后定义一个同样长的int 数组,用来记录String Buffer数组的每一个字符串的长度,返回int数组中最长的一个数即可。

方法二:用hash map效率会好很多。


代码一:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s == null ||s.length()<=1) return s.length();
        StringBuffer [] arr = new StringBuffer[s.length()];//声明10个 StringBuffer 的变量 并没有创建对象
        int [] result = new int [s.length()];
        Arrays.fill(result,0);
        for(int i = 0;i < s.length();i++){
            arr[i] = new StringBuffer(); //这是给变量创建对象
            arr[i].append(s.charAt(i));
            for(int j = i+1;j < s.length();j++){
                if((arr[i].indexOf(String.valueOf(s.charAt(j)))) ==-1){//StringBuffer类中的indexOf()中只能是查找字符串是否存在,不是字符 String类中用法一样
                    arr[i].append(s.charAt(j));
                }else
                    break;
            }
            result[i] = arr[i].length();
        }
        Arrays.sort(result);
        return result[s.length()-1];
    }
}

代码二:

import java.util.*;
class Solution {
    public int lengthOfLongestSubstring(String s) {
       if (s == null || s.length() <=1) return s.length();
        Map <Character, Integer> map = new HashMap <Character, Integer>();
        int max = 0,start = 0;
        for(int i = 0;i<s.length();i++){
            if(map.containsKey(s.charAt(i))){
                start = Math.max(start,map.get(s.charAt(i))+1);
            }
            max = Math.max(max,i-start+1);
            map.put(s.charAt(i),i);
        }
        return max;
    }
}

53. Maximum Subarray

题目:

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.

click to show more practice.

More practice:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

分析:给一个数组,求其和最大的连续的子数组,返回最大和的值。

代码:

class Solution {
    public int maxSubArray(int[] nums) {
        int max= Integer.MIN_VALUE,sum = 0;
        for(int i =0;i<nums.length;i++){
            if(sum<0) sum = nums[i];
            else sum  += nums[i];
            max = Math.max(max,sum); 
        }
        return max;
    }
}

知识点:

StringBuffer [] arr = new StringBuffer[s.length()];//声明10个 StringBuffer 的变量 并没有创建对象

for(int i = 0;i < s.length();i++){
            arr[i] = new StringBuffer(); //这是给变量创建对象                              
}

StringBuffer类中的indexOf()中只能是查找字符串是否存在,不是字符 String类中用法一样


String.valueOf()方法的使用
1. 由基本数据型态转换成 String 
String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 
也就是 String.valueOf() 这个参数多载的方法 
有下列几种 
String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 
String.valueOf(char c) : 将 char 变量 c 转换成字符串 
String.valueOf(char[] data) : 将 char 数组 data 转换成字符串 
String.valueOf(char[] data, int offset, int count) : 
将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串 
String.valueOf(double d) : 将 double 变量 d 转换成字符串 
String.valueOf(float f) : 将 float 变量 f 转换成字符串 
String.valueOf(int i) : 将 int 变量 i 转换成字符串 
String.valueOf(long l) : 将 long 变量 l 转换成字符串 
String.valueOf(Object obj) : 将 obj 对象转换成 字符串, 等于 obj.toString() 
用法如: 
int i = 10; 
String str = String.valueOf(i); 
这时候 str 就会是 "10" 
2. 由 String 转换成数字的基本数据型态 
要将 String 转换成基本数据型态转 
大多需要使用基本数据型态的包装类别 
比如说 String 转换成 byte 
可以使用 Byte.parseByte(String s) 
这一类的方法如果无法将 s 分析 则会丢出 NumberFormatException 
byte : 
Byte.parseByte(String s) : 将 s 转换成 byte 
Byte.parseByte(String s, int radix) : 以 radix 为基底将s转换为 byte 
比如说 Byte.parseByte("11", 16) 会得到 17 
double : 
Double.parseDouble(String s) : 将 s 转换成 double 
float : 
Double.parseFloat(String s) : 将 s 转换成 float 
int : 
Integer.parseInt(String s) : 将 s 转换成 int 
long : 
Long.parseLong(String s):将 s 转换成 Long

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值