344 反转字符串
初步思路:使用双指针,左右指针交换即可。
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
还是使用双指针的方法,要注意尾数不够k个的情况。
题目意思就是每隔k个交换k个,可以直接让i+=2*k,这样就不用再设一个变量计数了。
class Solution {
public String reverseStr(String s, int k) {
int n=s.length();
char[] ch=s.toCharArray();
for(int i=0;i<n;i+=2*k){
int l=i;
//尾数不够k个的情况
int r=Math.min(n-1,i+k-1);
while(l<r){
char temp=ch[l];
ch[l]=ch[r];
ch[r]=temp;
l++;
r--;
}
}
return new String(ch);
}
}
剑指Offer 05 替换空格
好奇怪,原先好像不是这个样子,原先是将“ ”改为“%20”.....这题目一改,就简单多了.......
class Solution {
public String pathEncryption(String path) {
StringBuilder res = new StringBuilder();
for(Character c : path.toCharArray())
{
if(c == '.') res.append(' ');
else res.append(c);
}
return res.toString();
}
}
剑指Offer 58-II 左旋字符串
思路:先整体翻转,再局部翻转。
翻转函数是通过异或来翻转的。也可以通过设置一个temp变量来翻转。
class Solution {
public String dynamicPassword(String password, int target) {
int len=password.length();
char[] ch = password.toCharArray();
reverseString(ch,0,len-1);
reverseString(ch,0,len-target-1);
reverseString(ch,len-target,len-1);
return new String(ch);
}
public static void reverseString(char[] ch, int start, int end){
while(start<end){
ch[start] ^=ch[end];
ch[end] ^=ch[start];
ch[start] ^= ch[end];
start++;
end--;
}
//System.out.println(ch);
}
}