【刷題打卡】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.
相關文章
- LeetCode刷題記錄——day1LeetCode
- day1打卡
- 字串打卡[1]字串
- leetcode刷題.143. 重排連結串列.每日打卡LeetCode
- string 字串字串
- String字串字串
- leetcode刷題.763. 劃分字母區間.每日打卡LeetCode
- JavaScript String 字串JavaScript字串
- 「翻轉字串」python之leetcode刷題|004字串PythonLeetCode
- 力扣刷題-滑動視窗(字串)力扣字串
- Java-string字串Java字串
- JavaScript 字串(String) 大全JavaScript字串
- String:字串型別字串型別
- String字串,陣列字串陣列
- C# 字串(String)C#字串
- 【刷題日記】leetcode-767 重構字串LeetCode字串
- LeetCode刷題進階之重新排列字串(1528)LeetCode字串
- String/StringBuilder字串拼接操作UI字串
- string,字串使用指南字串
- 樹狀陣列learning Day1識海社群打卡1st陣列
- Unity String格式化字串Unity字串
- 瞭解下C# 字串(String)C#字串
- 4.JNI: 操作字串String字串
- 圖神經網路7日打卡營--day1安裝筆記神經網路筆記
- DI String Match 增減字串匹配字串匹配
- redis string 簡單動態字串Redis字串
- InputStream流轉換成String字串字串
- String字串效能優化的探究字串優化
- 使用String. localeCompare比較字串字串
- 連結字串String.prototype.format字串ORM
- Day1 最短路專題
- Offer68題 Day1
- 國慶day1補題
- 刷題
- String字串的最大長度是多少?字串
- js字串string轉object物件 - 方法篇JS字串Object物件
- Java與眾不同的字串-String類Java字串
- c++中字串之string和charC++字串