剑指offer计划10(动态规划中等版)---java
1.1、题目1
剑指 Offer 46. 把数字翻译成字符串
1.2、解法
今天两题 都不会,泪目
1.3、代码
class Solution {
public int translateNum(int num) {
String src = String.valueOf(num);
int p = 0, q = 0, r = 1;
for (int i = 0; i < src.length(); ++i) {
p = q;
q = r;
r = 0;
r += q;
if (i == 0) {
continue;
}
String pre = src.substring(i - 1, i + 1);
if (pre.compareTo("25") <= 0 && pre.compareTo("10") >= 0) {
r += p;
}
}
return r;
}
}
2.1、题目2
剑指 Offer 48. 最长不含重复字符的子字符串
2.2、解法
这题写了一遍不知道为啥就是有点小问题,还是copy答案方便~~~,
这题不太明白,后面花点时间研究下啊。
2.3、代码
class Solution {
public int lengthOfLongestSubstring(String s) {
Map<Character, Integer> dic = new HashMap<>();
int res = 0, tmp = 0;
for(int j = 0; j < s.length(); j++) {
int i = dic.getOrDefault(s.charAt(j), -1); // 获取索引 i
dic.put(s.charAt(j), j); // 更新哈希表
tmp = tmp < j - i ? tmp + 1 : j - i; // dp[j - 1] -> dp[j]
res = Math.max(res, tmp); // max(dp[j - 1], dp[j])
}
return res;
}
}