344.反转字符串
题目链接: 344.反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题
**解题思路:**双指针法,一个指向头,一个指向尾,头尾同时移动交换
代码如下:
class Solution {
public void reverseString(char[] s) {
int l = 0;
int r = s.length - 1;
while(l < r){
char temp = s[l];
s[l] = s[r];
s[r] = temp;
l++;
r--;
}
}
}
541. 反转字符串II
题目链接:541. 反转字符串II
思路:循环截取字符串,调用翻转函数
代码如下:
class Solution {
public:
string reverseStr(string s, int k) {
int start=0;
string res="";
while(s.length()-start>=2*k){
string sub=reverseSubStr(s.substr(start,k));
res.append(sub);
start+=k;
res.append(s.substr(start,k));
start+=k;
}
if(s.length()-start<k){
string sub=reverseSubStr(s.substr(start,s.length()-start));
res.append(sub);
}
if(k<=s.length()-start&&s.length()-start<2*k){
string sub=reverseSubStr(s.substr(start,k));
res.append(sub);
start+=k;
res.append(s.substr(start,s.length()-start));
}
return res;
}
string reverseSubStr(string s){
//双指针法翻转字符串
if(s.length()==1){
return 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--;
}
return s;
}
};
剑指Offer 05.替换空格
题目链接:剑指Offer 05.替换空格
代码如下:
string replaceSpace(string s) {
string res="";
for(int i=0;i<s.length();i++){
if(s[i]==' '){
res.append("%20");
continue;
}
res.push_back(s[i]);
}
return res;
}
151.翻转字符串里的单词
题目链接:151.翻转字符串里的单词
思路:截取字符串拼接即可
代码如下:
class Solution {
public String reverseLeftWords(String s, int n) {
int len=s.length();
StringBuilder sb=new StringBuilder(s);
reverseString(sb,0,n-1);
reverseString(sb,n,len-1);
return sb.reverse().toString();
}
public void reverseString(StringBuilder sb, int start, int end) {
while (start < end) {
char temp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));
sb.setCharAt(end, temp);
start++;
end--;
}
}
}