344. 反转字符串
一定要养成双指针法的思维
如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。毕竟面试官一定不是考察你对库函数的熟悉程度, 如果使用python和java 的同学更需要注意这一点,因为python、java提供的库函数十分丰富。如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。
class Solution {
public void reverseString(char[] s) {
int left=0;
int right=s.length-1;
while(left<right){
char temp=s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
541. 反转字符串 II
class Solution {
public String reverseStr(String s, int k) {
char[] b = s.toCharArray();
for(int i=0;i<b.length;i+=2*k){
if(i+k<=b.length){
reverse(b,i,i+k-1);
continue;
}else{
reverse(b,i,b.length-1);
}
}
return new String(b);
}
//设计反转函数
public void reverse(char[] a,int i,int j){
for(;i<j;i++,j--){
char temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
双指针法
class Solution {
public String reverseStr(String s, int k) {
//将字符串,转化为数组
char[] a = s.toCharArray();
//双指针,分段操作,start(每段的开始) end(每段的结束)
for(int i=0;i<a.length;i+=2*k){
int start = i;
//判断当前段是否大于数组长度,是否在反转区间
int end = Math.min(a.length-1,start+k-1);
while(start<end){
char temp = a[start];
a[start] = a[end];
a[end] = temp;
start++;
end--;
}
}
return new String(a);
}
}
剑指 Offer 05. 替换空格
创建新字符串接收法
class Solution {
public String replaceSpace(String s) {
StringBuilder a = new StringBuilder();
for(int i=0;i<s.length();i++){
if(s.charAt(i)==' '){
a.append("%20");
}else{
a.append(s.charAt(i));
}
}
return new String(a);
}
}
双指针法
class Solution {
public String replaceSpace(String s) {
if(s==null || s.length()==0){
return s;
}
//扩容空间,%20是三个字符,所以三倍的空格,但本身就有一个,所以是两倍的空格
StringBuilder str = new StringBuilder();
for(int i=0;i<s.length();i++){
if(s.charAt(i)==' '){
str.append(" ");
}
}
//若没有空格,返回
if(str.length()==0){
return s;
}
//有空格,定义两个指针
int left = s.length()-1;//原始字符串最后一个位置
s+=str.toString();
int right = s.length()-1;//扩容字符串最后一个位置
char[] ch = s.toCharArray();
while(left>=0){
if(ch[left] ==' '){
ch[right] = '0';
ch[--right]='2';
ch[--right]='%';
}else{
ch[right] = ch[left];
}
left--;
right--;
}
return new String(ch);
}
}
151. 反转字符串中的单词
反转后倒序输出,注意空格问题
class Solution {
public String reverseWords(String s) {
String[] a = s.trim().split(" ");
StringBuilder re = new StringBuilder();
for(int i=a.length-1;i>=0;i--){
if(!(a[i].equals(""))){
re.append(a[i]);
if(i>0){
re.append(" ");
}
}
}
return new String(re);
}
}