LmaoSuVuong
Senior Member
bài dễ mới dám múa thôitui đang đọc thứ ma thuật gì đây![]()
bài dễ mới dám múa thôitui đang đọc thứ ma thuật gì đây![]()
đúng là lmao trong loài maobài dễ mới dám múa thôi![]()

Chúc mừng, thím chăm quá luônXem tệp đính kèm 2752140
Nhận badge nào anh em :>
class Solution {
public static final int BASE = 31;
public static final int MOD = 1_000_000_007;
public boolean rotateString(String s, String goal) {
if (s.length() != goal.length()) return false;
long curHash = getHash(s);
long targetHash = getHash(goal);
if (curHash == targetHash) return true;
long maxPow = 1;
for (int i = 1; i < s.length(); i++) {
maxPow *= BASE;
maxPow %= MOD;
}
for (int i = 0; i < s.length(); i++) {
curHash -= ((maxPow * (s.charAt(i) - 'a' + 1)) % MOD);
curHash += MOD;
curHash %= MOD;
curHash *= BASE;
curHash %= MOD;
curHash += (s.charAt(i) - 'a' + 1);
if (curHash == targetHash) return true;
}
return false;
}
public long getHash(String str) {
long hash = 0;
for (char c : str.toCharArray()) {
hash *= BASE;
hash += (c - 'a' + 1);
hash %= MOD;
}
return hash;
}
}
class Solution:
def compressedString(self, word: str) -> str:
result = []
curr, count, n = word[0], 1, len(word)
for i in range(1, n):
if curr != word[i]:
result.append(str(count) + curr)
curr, count = word[i], 1
continue
if count == 9:
result.append('9' + curr)
count = 1
continue
count += 1
if count > 0:
result.append(str(count) + curr)
return ''.join(result)
class Solution {
public:
string compressedString(string word) {
stringstream ss;
size_t pos = 0;
size_t i;
while (pos < word.length()) {
for (i = pos + 1; i - pos < 9 && i < word.length(); ++i) {
if (word[pos] != word[i])
break;
}
ss << (i - pos) << word[pos];
pos = i;
}
return ss.str();
}
};
class Solution:
def compressedString(self, word: str) -> str:
ans = ""
count = 1
def generateWord(count, char):
group = count//9
remainder = count%9
ans = str("9" + char)*group
if remainder != 0:
ans += str(remainder) + char
return ans
for i in range(1, len(word)):
if word[i] == word[i - 1]:
count += 1
else:
ans += generateWord(count, word[i - 1])
count = 1
ans += generateWord(count, word[-1])
return ans
class Solution {
/**
* @param String $word
* @return String
*/
function compressedString($word) {
$max = 9;
$ans = '';
$count = 0;
for ($i=0; $i<strlen($word); $i++) {
if ($count === 0) {
$count++;
$pre = $word[$i];
continue;
}
if ($word[$i] != $pre) {
$ans .= $count . $pre;
$pre = $word[$i];
$count = 1;
continue;
}
$count++;
if ($count == $max) {
$ans .= $count . $pre;
$count = 0;
}
}
$ans .= ($count > 0) ? $count . $pre : '';
return $ans;
}
}
class Solution {
public String compressedString(String word) {
if (word.isEmpty())
return word;
char last = word.charAt(0);
char c;
int count = 0;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < word.length(); i++) {
c = word.charAt(i);
if (c == last && count < 9) {
count++;
}
else {
sb.append(count);
sb.append(last);
last = c;
count = 1;
}
}
sb.append(count);
sb.append(last);
return sb.toString();
}
}
class Solution:
def compressedString(self, word: str) -> str:
if not word:
return word
last = word[0]
count = 0
result = []
for c in word:
if c == last and count < 9:
count += 1
else:
result.append(str(count))
result.append(last)
last = c
count = 1
result.append(str(count))
result.append(last)
return ''.join(result)
class Solution {
public String compressedString(String word) {
StringBuilder sb = new StringBuilder();
char last = word.charAt(0);
int cnt = 1;
for (int i = 1; i < word.length(); i++) {
if (word.charAt(i) == last) {
cnt++;
continue;
} else {
while (cnt > 0) {
int re = Math.min(cnt, 9);
sb.append(re);
sb.append(last);
cnt -= re;
}
cnt = 1;
last = word.charAt(i);
}
}
while (cnt > 0) {
int re = Math.min(cnt, 9);
sb.append(re);
sb.append(last);
cnt -= re;
}
return sb.toString();
}
}
public String compressedString(String word) {
int n = word.length();
int count = 0;
StringBuilder ans = new StringBuilder();
for(int i = 0; i < n; i++) {
count++;
if(i+1 == n || word.charAt(i) != word.charAt(i + 1) || count == 9) {
ans.append(count);
ans.append(word.charAt(i));
count = 0;
}
}
return ans.toString();
}
class Solution {
func compressedString(_ word: String) -> String {
var result:[Character] = []
let word = [Character](word)
var char = word[0]
var count = 0
func addChar() {
guard count > 0 else { return }
result.append(Character("\(count)"))
result.append(char)
}
for c in word {
if c == char {
count += 1
if count == 9 {
addChar()
count = 0
}
} else {
addChar()
char = c
count = 1
}
}
addChar()
return String(result)
}
}
class Solution {
public String compressedString(String word) {
StringBuilder comp = new StringBuilder();
for (int l = 0, r = 0; r < word.length(); r++) {
if (r - l == 9) {
comp.append("9").append(word.charAt(l));
l = r;
}
if (word.charAt(l) != word.charAt(r)) {
comp.append(r - l).append(word.charAt(l));
l = r;
}
if (r == word.length() - 1) {
comp.append(r - l + 1).append(word.charAt(l));
}
}
return comp.toString();
}
}
class Solution:
def compressedString(self, word: str) -> str:
comp = ""
l = 0
r = 0
for r in range(len(word)):
if r - l == 9:
comp += "9" + word[l]
l = r
if word[l] != word[r]:
comp += str(r - l) + word[l]
l = r
if r == len(word) - 1:
comp += str(r - l + 1) + word[l]
return comp
class Solution:
def compressedString(self, word: str) -> str:
stats = []
idx = 0
while idx < len(word):
c = word[idx]
start_idx = idx + 1
while start_idx < len(word) and word[start_idx] == c:
start_idx += 1
stats.append((c, start_idx - idx))
idx = start_idx
print(stats)
res = []
for (key, val) in stats:
print(key, val)
if val >= 9:
res.extend([f"9{key}"] * (val // 9))
if val % 9 != 0:
res.append(f"{val % 9}{key}")
return "".join(res)
class Solution:
def compressedString(self, word: str) -> str:
curr = word[0]
count = 0
res = ""
word += "!" # A dummy char used to ensure the loop executes 1 additional iteration
for c in word:
if c == curr:
count += 1
else:
while count >= 9:
count -= 9
res += "9" + curr
if count != 0:
res += str(count) + curr
curr = c
count = 1
return res
impl Solution {
pub fn compressed_string(word: String) -> String {
let (mut word, mut cword) = (word.as_bytes().iter(), Vec::new());
let (mut rep, mut c) = (1, word.next().copied().unwrap());
while let Some(&next_c) = word.next() {
if rep == 9 || c != next_c {
cword.push(b'0' + rep); cword.push(c);
c = next_c; rep = 1;
} else {
rep += 1;
}
}
cword.push(b'0' + rep); cword.push(c);
unsafe { String::from_utf8_unchecked(cword) }
}
}
class Solution {
public String compressedString(String word) {
StringBuilder sb = new StringBuilder();
char pre = word.charAt(0);
int count = 0;
for(char c:word.toCharArray()){
if(c==pre && count<9)
count++;
else {
sb.append(count).append(pre);
count = 1;
}
pre = c;
}
sb.append(count).append(pre);
return sb.toString();
}
}
code của bác bị chậm rồi, các đoạn dụng ans += là cộng string nó không như append của array nên độ phức tạp sẽ là O(len ans), e vừa check nhưng ko hiểu sao cách làm của e vẫn bị chậm hơn bọn nó, khác nhau mỗi việc ko dùng curr, mà của e dùng bằng access word cũng là O(1) mà, thậm chí bọn nó còn dùng word[1:] cost O(N) mà e dùng len(word) O(1) vẫn thua.Python:class Solution: def compressedString(self, word: str) -> str: ans = "" count = 1 def generateWord(count, char): group = count//9 remainder = count%9 ans = str("9" + char)*group if remainder != 0: ans += str(remainder) + char return ans for i in range(1, len(word)): if word[i] == word[i - 1]: count += 1 else: ans += generateWord(count, word[i - 1]) count = 1 ans += generateWord(count, word[-1]) return ans
class Solution:
def compressedString(self, word: str) -> str:
count = 1
ans = []
curr = word[0]
for c in word[1:]:
if c == curr:
count += 1
if count == 10:
ans.append(str("9"))
ans.append(c)
count = 1
else:
ans.append(str(count))
ans.append(curr)
curr = c
count = 1
ans.append(str(count))
ans.append(curr)
return "".join(ans)
class Solution:
def compressedString(self, word: str) -> str:
count = 1
ans = []
for i in range(1, len(word)):
if word[i] == word[i-1]:
count += 1
if count == 10:
ans.append(str("9"))
ans.append(word[i])
count = 1
else:
ans.append(str(count))
ans.append(word[i-1])
count = 1
ans.append(str(count))
ans.append(word[-1])
return "".join(ans)