把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
提示:
0 <= num < 231
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" 是一个子序列,不是子串。
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;
}
}