( Java 和 C++ 还是有差别)卑微地向API低下了头,但是反转字符串的单词依旧写了很久 学会( 151. 反转字符串中的单词 ) 两个剑指就像小儿科
344.反转字符串 - ez
class Solution {
public void reverseString(char[] s) {
int left = 0, right = s.length - 1;
char tmp;
while (left < right) {
tmp = s[left];
s[left] = s[right];
s[right] = tmp;
right--;
left++;
}
}
}
541. 反转字符串II
1、 画图去分析,会很容易找到end的取值
2、把 i++ 变成 i+= 2*k 是一个很重要的思路进步 -
class Solution {
public String reverseStr(String s, int k) {
char[] str = s.toCharArray();
for (int i = 0; i < s.length(); i += 2 * k) {
int start = i;
int end;
end = i + k - 1 > s.length() - 1 ? s.length() - 1 : i + k - 1;
// ⬆⬆⬆⬆⬆⬆ IDEA自动优化成Math.min(i + k - 1, s.length() - 1)
char tmp;
while (start < end) {
tmp = str[start];
str[start] = str[end];
str[end] = tmp;
start++;
end--;
}
}
return new String(str);
}
}
151.翻转字符串里的单词
1、思路很重要 ( 先去空格 -> 反转字符串 -> 反转字符串的单词 )
2、还就内个找 end 找了很久。
/********************************/
/**
* <a href="https://leetcode.cn/problems/reverse-words-in-a-string/">151. 反转字符串中的单词</a><BR>
* 给你一个字符串 s ,请你反转字符串中 单词 的顺序。<BR>
*/
public String reverseWords(String s) {
StringBuilder sb = new StringBuilder();
sb = removeSpace(s);
reverseEachWord(sb);
reverse(sb, 0, sb.length() - 1);
return sb.toString();
}
private StringBuilder removeSpace(String s) {
StringBuilder sb = new StringBuilder();
int start = 0, end = s.length() - 1;
while (s.charAt(start) == ' ') start++;
while (s.charAt(end) == ' ') end--;
while (start <= end) {
if (s.charAt(start) != ' ' || sb.charAt(sb.length() - 1) != ' ') {
sb.append(s.charAt(start));
}
start++;
}
return sb;
}
private void reverse(StringBuilder sb, int start, int end) {
char tmp;
while (start < end) {
tmp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));
sb.setCharAt(end, tmp);
start++;
end--;
}
}
private void reverseEachWord(StringBuilder sb) {
int start = 0, end = start + 1;
while (end < sb.length()) {
while (end < sb.length() && sb.charAt(end) != ' ') {
end++;
}
reverse(sb, start, end - 1);
// end其实是通过start去定位的,能用函数映射关系找数字,就不要用脑袋去找
start = end + 1;
end = start + 1;
}
}
/**************************************************/
剑指Offer 05.替换空格 【经历151题的我,这个不要太ez】
【省流: ez 但是 API战士】
class Solution {
public String replaceSpace(String s) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
sb.append("%20");
} else {
sb.append(s.charAt(i));
}
}
return sb.toString();
}
}
剑指Offer58-II.左旋转字符串 【那就更ez了】
【谢谢 java提供的面向对象方法】
【学过c语言,感觉面向过程会复杂一点,我也不确定】
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n) + s.substring(0,n);
}
}

浙公网安备 33010602011771号