leetcode 344 反转字符串
public static void reverseString(char[] s){
/*int mid = s.length/2;
char tmp;
for(int i=0;i<mid;i++){
tmp=s[i];
s[i]=s[s.length-1-i];
s[s.length-1-i]=tmp;
}*/
int i=0;
int j=s.length-1;
char tmp;
for(;i<j;i++){
tmp=s[i];
s[i]=s[j];
s[j]=tmp;
j--;
}
}
leetcode 541 反转字符串2
public static String reverseStr(String s, int k){
String result;
char[] chars = s.toCharArray();
for(int i=0;i<s.length();i+=2*k){
int left= i;
int right=i+k-1;
if ((k + i) > s.length()-1) {
right=s.length()-1;
}
while(left<right) {
if(left!=right) {
chars[left] ^= chars[right];
chars[right] ^= chars[left];
chars[left] ^= chars[right];
}
left++;
right--;
}
}
result= new String(chars);
return result;
}
剑指offer 05 替换空格
//比较简单
public static String replaceSpace(String s){
String result=null;
StringBuilder sb=new StringBuilder();
// result = s.replace(" ","%20");
char[] chars= s.toCharArray();
for (char c:chars) {
if(c==' '){
sb.append("%20");
}else {
sb.append(c);
}
}
result= sb.toString();
return result;
}
leetcode 151 反转字符串里的单词
public static String reverseWords(String s){
String res;
//s.split("");
//1 去除多余空格
char[] chars = s.toCharArray();
int j=0;
for (int i=0;i<chars.length;i++){
if(chars[i]!=' '){
if(j!=0 && i-1>0 && chars[i-1]==' ')
chars[j++]=' ';
chars[j++]=chars[i];
}
}
//char[] newChars= Arrays.copyOf(chars,j);
char[] newChars= new char[j];
System.arraycopy(chars,0,newChars,0,j);
//2 反转全串
reverseString(newChars,0, newChars.length-1);
//3 单词转正
res= reverseEachWord(newChars);
return res;
}
private static String reverseEachWord(char[] newChars) {
int j=0;
for (int i=0;i<=newChars.length;i++){
if( i==newChars.length|| newChars[i]==' '){
reverseString(newChars,j,i-1);
j=i+1;
}
}
return new String(newChars);
}
public static char[] reverseString(char[] chars, int start,int end){
while(start<end){
chars[start]^=chars[end];
chars[end]^=chars[start];
chars[start]^=chars[end];
start++;
end--;
}
return chars;
}
剑指offer 58 左旋转 字符串
思路简单,需要基础扎实
public static String reverseLeftWords(String s,int n){
String res;
char[] chars = s.toCharArray();
int start =0;
int end=n-1;
reverseEach(chars,start,end);
start=n;
end=chars.length-1;
reverseEach(chars,start,end);
start=0;
end=s.length()-1;
reverseEach(chars,start,end);
res = new String(chars);
return res;
}
public static char[] reverseEach(char[] chars, int start,int end){
while(start<end){
chars[start]^=chars[end];
chars[end]^=chars[start];
chars[start]^=chars[end];
start++;
end--;
}
return chars;
}