好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

剑指Offer之Java算法习题精讲字符串操作与数组及二叉搜索树

题目一

 解法

class Solution {
  public String reverseOnlyLetters(String s) {
      char[] chars = s.toCharArray();
      int left = 0;
      int right = chars.length-1;
      while(left<=right){
          char tmp = 0;
          if(chars[left]>='a'&&chars[left]<='z'||(chars[left]>='A'&&chars[left]<='Z')){
              tmp = chars[left];
          }else {
              left++;
              continue;
          }
          if(chars[right]>='a'&&chars[right]<='z'||(chars[right]>='A'&&chars[right]<='Z')){
              chars[left] = chars[right];
              chars[right] = tmp;
          }else {
              right--;
              continue;
          }
          left++;
          right--;
      }
      return new String(chars);
  }
}

 

题目二

解法

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode() {}
*     TreeNode(int val) { this.val = val; }
*     TreeNode(int val, TreeNode left, TreeNode right) {
*         this.val = val;
*         this.left = left;
*         this.right = right;
*     }
* }
*/
class Solution {
  public TreeNode increasingBST(TreeNode root) {
      ArrayList<Integer> list = new ArrayList<Integer>();
      method(root,list);
      TreeNode ans = new TreeNode(-1);
      TreeNode cur = ans;
      for(int i:list){
          TreeNode node = new TreeNode(i);
          cur.right = node;
          cur = cur.right;
      }
      return ans.right;
  }
  public void method(TreeNode root,List<Integer> list){
      if(root==null) return;
      method(root.left,list);
      list.add(root.val);
      method(root.right,list);
  }
}

 

 题目三

解法

class Solution {
  public int[] sortArrayByParity(int[] nums) {
      int[] ans = new int[nums.length];
      int left = 0;
      int right = nums.length-1;
      for(int i : nums){
          if(i%2==0){
              ans[left] = i;
              left++;
          }else{
              ans[right] = i;
              right--;
          }
      }
      return ans;
  }
}

class Solution {
  public int[] sortArrayByParity(int[] nums) {
      int left = 0;
      int right = nums.length-1;
      while(left<=right){
          if(nums[left]%2==0){
              left++;
              continue;
          }
          if(nums[right]%2!=0){
              right--;
              continue;
          }
          if(nums[left]%2!=0&&nums[right]%2==0){
              int tmp = nums[left];
              nums[left] = nums[right];
              nums[right] = tmp;
          }
      }
      return nums;
  }
}

 

 题目四

 解法

class Solution {
  public boolean backspaceCompare(String s, String t) {
      if(method(s).equals(method(t))) return true;
      return false;
  }
  public static String method(String s){
      int slow = 0;
      char[] chars = s.toCharArray();
      for (int i = 0; i < chars.length; i++) {
          if(chars[i]=='#'){
              chars[i] = 0;
              slow = i;
              while (true){
                  if(slow-1<0) break;
                  if (chars[slow-1]!=0){
                      chars[slow-1] = 0;
                      break;
                  }
                  slow--;
              }
          }
      }
      StringBuilder sb = new StringBuilder();
      for(char i : chars){
          if(i!=0) sb.append(i);
      }
      return sb.toString();
  }
}

到此这篇关于剑指Offer之Java算法习题精讲字符串操作与数组及二叉搜索树的文章就介绍到这了,更多相关Java 字符串操作内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/wai_58934/article/details/123306957

查看更多关于剑指Offer之Java算法习题精讲字符串操作与数组及二叉搜索树的详细内容...

  阅读:19次