字符串替换,给定一个字符串,以及一个keys数组和values数组,keys数组和values数组相对应,在给定的字符串中,如果%中间的子串存在于keys中,则将%子串%替换为keys对应的values。
输入:
"%FILENAME%VIRUSNAME%SENDER%VIRUSNAME%FILENAME%",
["SENDER","RCPTS","SUBJECT","FILENAME","VIRUSNAME","ACTION"],
["abc@test.com","test@company.com","Test","Myfile","ICAN","Delete"]
输出:
"MyfileVIRUSNAME%balabalabalaICANFILENAME%"
思路:使用Map记录keys和values的关系,然后使用双指针,遍历给定的字符串即可,注意细节处理!这道题当时卡在细节处理了,难倒英雄汉。。。。
代码:#include#include #include
Java代码:
public class 趋势科技1 { public static void main(String[] args) { String my_template = "%FILENAME%VIRUSNAME%balabalabala%VIRUSNAME%FILENAME%"; String[] keys = new String[]{"SENDER","RCPTS","SUBJECT","FILENAME","VIRUSNAME","ACTION"}; String[] values = new String[]{"abc@test.com","test@company.com","Test","Myfile","ICAN","Delete"}; StringBuilder sb = new StringBuilder(); int len = my_template.length(); for(int i=0;i题目2 岛屿中最长的曼哈顿距离 类似于leetcode 200中求岛屿的数量,以及岛屿中最大的曼哈顿距离;
思路:暴力DFS+求解曼哈顿距离!
代码:// Java版本 import java.util.ArrayList; public class 趋势科技2 { static int max = Integer.MIN_VALUE; public static void main(String[] args) { int count = 0; int[][] nums = new int[][]{ {0,0,0,0,0,1,1,1,1,1}, {0,1,0,0,0,1,0,0,0,1}, {0,0,0,0,0,1,0,0,0,1}, {0,0,0,0,0,1,1,1,1,1}, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,0,0,0}, {0,0,0,1,1,1,1,1,0,0}, {1,1,1,1,1,1,1,1,1,0} }; boolean[][] flag = new boolean[nums.length][nums[0].length]; for(int i=0;i< nums.length;i++){ for(int j=0;j(),flag); count++; } } } System.out.println(count); System.out.println(max); } public static void dfs(int[][] nums, int i, int j, ArrayList list,boolean[][] flag){ //边界和判断条件 if(i<0||j<0||i>=nums.length||j>=nums[0].length||nums[i][j]==0||flag[i][j])return; //这里因为要用到网格的1,所以不能设为0,添加了一个flag来做是否走过的判断 flag[i][j] = true; //使用一个list 存一个图形中所有的点,以此来算最大曼哈顿距离 for(int[] pre : list){ int temp = Math.abs(pre[0]-i)+Math.abs(pre[1]-j); max = Math.max(temp,max); } //添加这次的点到list中 list.add(new int[]{i,j}); //遍历四周 dfs(nums,i+1,j,list,flag); dfs(nums,i,j+1,list,flag); dfs(nums,i-1,j,list,flag); dfs(nums,i,j-1,list,flag); } } C++版本:
#include#include using namespace std; int maxx = INT_MIN; int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; void dfs(vector > nums, int i,int j, vector > points, vector > flag){ if(i<0||j<0||i>=nums.size()||j>=nums[0].size()||nums[i][j]==0||flag[i][j]){ return; } flag[i][j] = true; for(int k=0;k (i,j)); for(int k=0;k<4;k++){ int dx = i+dir[k][0]; int dy = i+dir[k][1]; dfs(nums,dx,dy,points,flag); } return; } int main() { int count = 0; vector > nums={...}; vector > flag; vector >list; for(int i=0;i 总结: 这一次是前期做的一个笔试,手比较生,继续加油吧!提高自己的做题速度!!!!!