【刷題打卡】day1 - 字串string
從現在開始每天至少刷一道題。
題庫:lintcode
1790. Rotate String II
題目連結
難度:easy
演算法:字串操作
解題思路
總偏移量offset = left - right。
如果總偏移量>0, 字串往左偏移, offset從起點開始偏移,把[0, offset], [offset, string長度]兩邊子字串交換一下。
如果right > left. 字串往右偏移,offset從終點開始偏移, 把[0, string長度-offset]和[string長度-offset, string長度]兩邊的子字串交換一下。
注意:當偏移量超過字串的長度時,通過取模(%)方法獲得小於字串的長度的偏移量
解法
public class Solution {
/**
* @param str: A String
* @param left: a left offset
* @param right: a right offset
* @return: return a rotate string
*/
public String RotateString2(String str, int left, int right) {
// write your code here
int offset = (left - right) % str.length();
// left, truncate the first offset characters
if (offset > 0){
str = str.substring(offset) + str.substring(0, offset);
}else if(offset < 0){
offset = str.length() - Math.abs(offset);
str = str.substring(offset) + str.substring(0, offset);
}
return str;
}
}
667. Longest Palindromic Subsequence
題目連結
難度:median
演算法:動態規劃
解題思路
一看到題目求最值,優先考慮動態規劃。
對於任意長度字串, 如果首尾字元相等,那麼最長子序列等於去掉首尾的子字串的最長子序列加上首尾;如果首尾字元不相等,那麼最長子序列等於去掉首的子字串的最長子序列和去掉尾的子字串的最長子序列的最大值
dp[i][j]表示從i到j的子字串最長迴文子序列的長度。
when s[i] == s[j] , dp[i][j] = dp[i+1][j-1] + 2;
when s[i] != s[j], dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
巢狀迴圈, i依次遞減,j依次遞增。
解法
public class Solution {
/**
* @param s: the maximum length of s is 1000
* @return: the longest palindromic subsequence's length
*/
public int longestPalindromeSubseq(String s) {
// write your code here
if (s == null || s.length() == 0){
return 0;
}
// state: the maximum length of palindromic subsequence in substring(i,j)
int n = s.length();
int[][] dp = new int[n][n];
//init
for(int i=0;i< n; i++){
dp[i][i] = 1;
}
for(int i=n-1;i>=0;i--){
for(int j=i+1;j<n;j++){
//function
if (s.charAt(i) == s.charAt(j)){
dp[i][j] = dp[i+1][j-1] + 2;
}else{
dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
}
}
}
return dp[0][n-1];
}
}
注意:當j = i+1, dp[i][i+1] = dp[i+1][i] + 2, dp[i+1][i] = 0, 因為初始化後值都為0.
相關文章
- day10打卡
- day11打卡
- day12打卡
- day1打卡
- day17打卡
- 字串打卡[1]字串
- LeetCode刷題記錄——day1LeetCode
- OJ刷題之《複製字串》字串
- 力扣刷題-滑動視窗(字串)力扣字串
- leetcode刷題.763. 劃分字母區間.每日打卡LeetCode
- leetcode刷題.143. 重排連結串列.每日打卡LeetCode
- String字串字串
- string 字串字串
- JavaScript String 字串JavaScript字串
- JavaScript 字串(String) 大全JavaScript字串
- Java-string字串Java字串
- String:字串型別字串型別
- String字串,陣列字串陣列
- String與字串池字串
- C# 字串(String)C#字串
- 「翻轉字串」python之leetcode刷題|004字串PythonLeetCode
- 【刷題日記】leetcode-767 重構字串LeetCode字串
- Redis命令String(字串)教程Redis字串
- string,字串使用指南字串
- 圖神經網路7日打卡營--day1安裝筆記神經網路筆記
- 樹狀陣列learning Day1識海社群打卡1st陣列
- LeetCode刷題進階之重新排列字串(1528)LeetCode字串
- 瞭解下C# 字串(String)C#字串
- 4.JNI: 操作字串String字串
- Redis的字串型別(String)Redis字串型別
- 字串操作>靜態串String字串
- Swift - 字串(String)用法詳解Swift字串
- Unity String格式化字串Unity字串
- leetcode第一刷_Interleaving StringLeetCode
- 連結字串String.prototype.format字串ORM
- String/StringBuilder字串拼接操作UI字串
- DI String Match 增減字串匹配字串匹配
- InputStream流轉換成String字串字串