题目:

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

一、调用函数(my)


  1. public class Solution {
  2. public String replaceSpace(StringBuffer str) {
  3. return str.toString().replace(" ", "%20");
  4. }
  5. }

二、用新的数组存

  1. StringBuffer sb = new StringBuffer();
  2. for(int i=0;i<str.length();i++)
  3. {
  4. if(str.charAt(i) == ' ')
  5. {
  6. sb.append("%20");
  7. }else
  8. {
  9. sb.append(str.charAt(i));
  10. }
  11. }
  12. return sb.toString();

三、扩展当前字符串的空间

1.分析

  1. 计算替换后的字符串需要多大的空间,并对原字符串空间进行扩容;
  2. 从后往前替换字符串的话,每个字符串只需要移动一次;
  3. 如果从前往后,每个字符串需要多次移动,效率较低。

    2.代码

    ```java 链接:https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423?answerType=1&f=discussion 来源:牛客网

public class Solution { public String replaceSpace(StringBuffer str) { int spacenum = 0; for(int i = 0; i < str.length(); i++){ if(str.charAt(i) == ‘ ‘){ spacenum++; } } int oldLength = str.length(); int oldIndex = oldLength - 1; int newLength = oldLength + spacenum*2; str.setLength(newLength); int newIndex = newLength - 1; for(; oldIndex >= 0 && oldLength < newLength; oldIndex—){ if(str.charAt(oldIndex) == ‘ ‘){ str.setCharAt(newIndex—, ‘0’); str.setCharAt(newIndex—, ‘2’); str.setCharAt(newIndex—, ‘%’); }else{ str.setCharAt(newIndex—, str.charAt(oldIndex)); } } return str.toString(); } } ```