学习剑指offer: 第10天

78 阅读1分钟

把数字翻译成字符串

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

输入: 12258
输出: 5
解释: 122585种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi""mzi"

提示:

  • 0 <= num < 231

leetcode-cn.com/problems/ba…

class Solution {
    public int translateNum(int num) {
        String numStr = num+ "";       
        char[] charArray = numStr.toCharArray();
        int[] arr = new int[charArray.length+1];
        arr[0] = 1;
        arr[1] = 1;
        for(int i=2; i<=charArray.length; i++){
            int n = Integer.valueOf(charArray[i-2]+""+charArray[i-1]);
            if(n >=10 && n<=25){
                arr[i] = arr[i-1] + arr[i-2];
            } else {
                arr[i] = arr[i-1];
            }
        }
        return arr[arr.length-1];
    }
}

最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

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

leetcode-cn.com/problems/zu…

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s.length() ==0){
            return 0;
        }

        int[] arr = new int[255];
        for(int i=0; i<255;i++){
            arr[i] = -1;
        }
        int temp = 0;
        int max=0;
        int last =0;
        for(int i=0; i<s.length(); i++){
            if(arr[s.charAt(i)] == -1){
                temp++;
                max = Math.max(temp, max);
            }else {
                max = Math.max(temp, max);
                temp= i - arr[s.charAt(i)];
                int tep = arr[s.charAt(i)]+1;
                for(int j=last; j<= arr[s.charAt(i)];j++){
                    arr[s.charAt(j)] = -1;
                }
                last = tep;
            }
            arr[s.charAt(i)] = i;
        }
        max = Math.max(temp, max);
        return max;
    }
}