leetcode字符串系列

3. 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

 public int lengthOfLongestSubstring(String s) {
        if(s==null||s.length()==0)
            return 0;
        if(s.length()==1)
            return 1;
        Queue<Character>queue=new LinkedList<Character>();
        Set<Character>set=new HashSet<Character>();
        int maxLen=0;
        int i=0;
        int count=0;
        while(i<s.length()){
            if(!set.contains(s.charAt(i))){
                set.add(s.charAt(i));
                queue.offer(s.charAt(i));
                count++;
                i++;
            }else{
               
                maxLen=Math.max(maxLen,count);
                while(set.contains(s.charAt(i))){
                    
                    set.remove(queue.poll());
                    //System.out.println(set);
                    count--;
                }
             set.add(s.charAt(i));
               queue.offer(s.charAt(i));
                count++;
                i++;
                //set.remove(s.charAt(i));
            }
           // System.out.println(count); 
        }
        maxLen=Math.max(maxLen,count);
        return maxLen;
    }
}

43. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
public String multiply(String num1, String num2) {
        if(num1.equals("0")||num2.equals("0"))
            return "0";
        int number1[]=new int[110];
        int []number2=new int[110];
        int result[]=new int[200];
        for(int i=num1.length()-1;i>=0;i--){
            number1[num1.length()-1-i]=num1.charAt(i)-'0';
        }
        for(int i=num2.length()-1;i>=0;i--)
            number2[num2.length()-1-i]=num2.charAt(i)-'0';
        int car=0;
        int len=0;
        for(int i=0;i<num1.length();i++){
            car=0;
            int m=number1[i];//m=3
            int j;
            for( j=0;j<num2.length();j++){
                int n=number2[j];//6,5,4
                int multi=m*n+car;   
                 car=(result[i+j]+multi)/10;
                result[j+i]=(result[i+j]+multi)%10;//result[0]=8,car=1
               
                //System.out.println(result[j+i]);
            }
            result[j+i]=result[j+i]+car;
          /* for(int h=i;h<j+i+2;h++)
               System.out.print(result[h]+" ");
             System.out.println();*/
            if(i==num1.length()-1){
                if(car!=0)
                    len=j+i+1;
                else
                    len=j+i;
                    
            }
            // System.out.println(len);
        }
        StringBuilder str=new StringBuilder();
        for(int i=0;i<len;i++){
               str.append(result[i]);
                
        }
        return str.reverse().toString();
        
    }

猜你喜欢

转载自www.cnblogs.com/HannahLihui/p/10170799.html