题目1:【二刷完成】
代码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--;
}
}
}
题目2:【二刷完成】
代码2:
class Solution {
public String reverseStr(String s, int k) {
char[] charString = new char[s.length()];
charString = s.toCharArray();
int num1 = s.length()/2/k;
int num2 = s.length()%(2*k);
for (int i=(2*k);i<=num1*2*k;i+=(2*k)){
reversString(charString, i-2*k, i-k-1);
}
if (num2<k){
reversString(charString,num1*2*k,s.length()-1);
}else{
reversString(charString,num1*2*k,num1*2*k+k-1);
}
return String.valueOf(charString);
}
public void reversString(char[] s, int start, int end){
while(start<end){
char temp = s[end];
s[end] = s[start];
s[start] = temp;
start++;
end--;
}
}
}
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for (int i=0; i<ch.length; i += (2*k)){
//加一个计数器,但是可能没那么简洁
//每次都是2k一段判断,可以选择2k为步长
int l = i;
int r = Math.min(i+k-1,ch.length-1);
while(l<r){
char temp = ch[r];
ch[r] = ch[l];
ch[l] = temp;
l++;
r--;
}
}
return new String(ch);
}
}
题目3:【二刷完成】
代码3:
class Solution {
public String pathEncryption(String path) {
char[] pathCode = new char[path.length()];
pathCode = path.toCharArray();
for (int i=0;i<path.length();i++){
if (pathCode[i]=='.'){
pathCode[i]=' ';
}
}
return String.valueOf(pathCode);
}
}
class Solution {
public String pathEncryption(String path) {
if(path==null){
return null;
}
StringBuilder sb = new StringBuilder();
for (int i=0; i<path.length(); i++){
if (path.charAt(i)=='.'){
sb.append(" ");
}else{
sb.append(path.charAt(i));
}
}
return sb.toString();
}
}
题目4:【二刷完成】
代码4:
class Solution {
public String reverseWords(String s) {
StringBuilder sb = removeSpace(s);
String stringS = sb.toString();
char[] ss = new char[stringS.length()];
ss = stringS.toCharArray();
reverse(ss,0,stringS.length()-1);
for (int i=0;i<stringS.length();i++){
if (ss[i]==' ') continue;
int tempNum = i;
while(i<stringS.length() && ss[i]!=' '){
i++;
}
reverse(ss,tempNum,i-1);
}
return String.valueOf(ss);
}
public void reverse(char[] s, int start, int end){
while(start<end){
char temp = s[end];
s[end] = s[start];
s[start] = temp;
start++;
end--;
}
}
private StringBuilder removeSpace(String s) {
int start = 0;
int end = s.length() - 1;
while (s.charAt(start) == ' ') start++;
while (s.charAt(end) == ' ') end--;
StringBuilder sb = new StringBuilder();
while (start <= end) {
char c = s.charAt(start);
if (c != ' ' || sb.charAt(sb.length() - 1) != ' ') {
sb.append(c);
}
start++;
}
return sb;
}
}
class Solution {
public String reverseWords(String s) {
// 1.去除首尾以及中间多余空格
StringBuilder sb = removeSpace(s);
// 2.反转整个字符串
reverseString(sb, 0, sb.length() - 1);
// 3.反转各个单词
reverseEachWord(sb);
return sb.toString();
}
private StringBuilder removeSpace(String s) {
int start = 0;
int end = s.length() - 1;
//删除首尾的空格
while (s.charAt(start) == ' ') start++;
while (s.charAt(end) == ' ') end--;
StringBuilder sb = new StringBuilder();
while (start <= end) {
char c = s.charAt(start);
//判断是否有连续空格,有的话删除
if (c != ' ' || sb.charAt(sb.length() - 1) != ' ') {
sb.append(c);
}
start++;
}
//返回删除之后的字符串
return sb;
}
/**
* 反转字符串指定区间[start, end]的字符
*/
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--;
}
}
private void reverseEachWord(StringBuilder sb) {
int start = 0;
int end = 1;
int n = sb.length();
while (start < n) {
while (end < n && sb.charAt(end) != ' ') {
end++;
}
reverseString(sb, start, end - 1);
start = end + 1;
end = start + 1;
}
}
}
题目5:【二刷完成】
代码5:
class Solution {
public String dynamicPassword(String password, int target) {
char[] ch = new char[password.length()];
ch = password.toCharArray();
reverse(ch,0,password.length()-1);
reverse(ch,0,password.length()-1-target);
reverse(ch,password.length()-target,password.length()-1);
return String.valueOf(ch);
}
public void reverse(char[] ch, int start, int end){
while(start<end){
char temp = ch[end];
ch[end] = ch[start];
ch[start] = temp;
start++;
end--;
}
}
}
class Solution {
public String dynamicPassword(String password, int target) {
StringBuilder sb=new StringBuilder(password);
int len = password.length();
reverseString(sb,0, target-1);
reverseString(sb,0,len-1);
reverseString(sb,0,len-target-1);
return sb.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--;
}
}
}