给定两个字符串,,将中的包含在中的字符翻转。
分享一个简单的思路,代码贴上,大家一看就懂
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s1 string字符串 * @param s2 string字符串 * @return string字符串 */ public String reverse (String s1, String s2) { // write code here int left = 0; int right = s1.length()-1; char[] s1Char = s1.toCharArray(); while(left<right) { while (!s2.contains(String.valueOf(s1Char[left]))) { ++left; } while (!s2.contains(String.valueOf(s1Char[right]))) { --right; } char temp = s1Char[left]; s1Char[left] = s1Char[right]; s1Char[right] = temp; ++left; --right; } return String.valueOf(s1Char); } }
public String reverse (String s1, String s2) { // write code here String str=""; Stack<Character> sks1=new Stack<>(); int start=0; int end=s1.length()-1; char[] charS1=s1.toCharArray(); while(start<end){ if(s2.contains(String.valueOf(charS1[start]))){ sks1.add(charS1[start]); }else{ start++; continue; } if(s2.contains(String.valueOf(charS1[end]))){ if(!sks1.isEmpty()){ char temp=charS1[end]; charS1[end]=sks1.pop(); charS1[start]=temp; start++; end--; } }else{ end--; } } str=new String(charS1); return str; } 代码基本上就是4479的那个,不过他有部分不太对,我改了一下。
public String reverse (String s1, String s2) { // write code here char[] charS1=s1.toCharArray(); List<Integer> index=new ArrayList(); List<Character> str=new ArrayList(); for(int i=0;i<s1.length();i++){ for(int j=0;j<s2.length();j++){ if(charS1[i]==s2.charAt(j)){ index.add(i); str.add(charS1[i]); } } } Collections.reverse(str); for(int i=0;i<index.size();i++){ charS1[index.get(i)]=str.get(i); } String a=new String(charS1); return a; }
public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s1 string字符串 * @param s2 string字符串 * @return string字符串 */ public String reverse (String s1, String s2) { // write code here char[] s1_arr = s1.toCharArray(); char[] s2_arr = s2.toCharArray(); ArrayList<Integer> keys = new ArrayList<>(); for (int i = 0; i < s1_arr.length; i++) { for (int j = 0; j < s2_arr.length; j++) { if (s1_arr[i] == s2_arr[j]) { keys.add(i); } } } //keys里面是s1中包含在s2中的字符的索引 //升序排列 Collections.sort(keys); int left = 0; int right = keys.size() - 1; while (left < right) { char temp = s1_arr[keys.get(right)]; s1_arr[keys.get(right)] = s1_arr[keys.get(left)]; s1_arr[keys.get(left)] = temp; left++; right--; } return String.valueOf(s1_arr); } }
class Solution { public: string reverse(string s1, string s2) { unordered_set<char> us; for (char c : s2) us.insert(c); vector<int> indices; int n = s1.size(); for (int i = 0; i < n; ++i) if (us.count(s1[i]) > 0) indices.push_back(i); int m = indices.size(); int i = 0, j = m - 1; while (i < j) { swap(s1[indices[i]], s1[indices[j]]); ++i; --j; } return s1; } };
private String test3(String s1,String s2){ Stack<Character> charactersStack = new Stack<>(); char[] s1Char = s1.toCharArray(); int start = 0 ; int end = s1Char.length - 1; while (start < end){ if (s2.contains(String.valueOf(s1Char[start]))){ charactersStack.add(s1Char[start]); }else{ start++; continue; } if (s2.contains(String.valueOf(s1Char[end]))){ if (charactersStack.isEmpty()){ start++; continue; }else { char index = s1Char[end]; s1Char[end] = charactersStack.pop(); s1Char[start] = index; start++; end--; } }else { end--; } } return new String(s1Char); }
import java.util.*; import java.util.HashSet; import java.util.Set; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s1 string字符串 * @param s2 string字符串 * @return string字符串 */ public String reverse (String s1, String s2) { // write code here // write code here Set<Character> hashSet=new HashSet<>(); char[] c1=s1.toCharArray(); char[] c2=s2.toCharArray(); for (char c : c2) { hashSet.add(c); } int l=0,r=c1.length-1; while (l<r){ while (!hashSet.contains(c1[l])){ l++; } while (!hashSet.contains(c1[r])){ r--; } char temp=c1[l]; c1[l]=c1[r]; c1[r]=temp; l++; r--; } return String.valueOf(c1); } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s1 string字符串 * @param s2 string字符串 * @return string字符串 */ public String reverse (String s1, String s2) { // write code here char[] c2 = s2.toCharArray(); Set<Character> set = new HashSet<>(); for(Character c : c2){ set.add(c); } //判断c1字符串中有哪几个索引对应的字符是包含在s2中的 char[] c1 = s1.toCharArray(); List<Integer> list = new ArrayList<>(); for(int i = 0; i < c1.length; i++){ if(set.contains(c1[i])){ list.add(i); } } //将存储需要反转的索引的集合变成数组 Integer[] array = list.toArray(new Integer[list.size()]); //用双指针进行反转 int left = 0; int right = array.length-1; while(left < right){ char temp = c1[array[right]]; c1[array[right]] = c1[array[left]]; c1[array[left]] = temp; left++; right--; } return new String(c1); } }